From 994179f53ba3353ecb4df0cc70f952b2284873e8 Mon Sep 17 00:00:00 2001 From: tzy Date: Wed, 9 Apr 2025 17:31:43 +0800 Subject: [PATCH] =?UTF-8?q?feat(BatteryStationServiceImpl):=20=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=E8=8E=B7=E5=8F=96=E6=88=96=E7=94=9F=E6=88=90=20RSA=20?= =?UTF-8?q?=E5=AF=86=E9=92=A5=E5=AF=B9=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 RsaSecretKey 方法,根据电站编码获取或生成 RSA 密钥对 - 优化了密钥对的生成和保存逻辑,避免重复生成- 增加了对已有密钥对的查询和直接返回功能,提高效率 --- .../impl/BatteryStationServiceImpl.java | 58 ++++++++++++++----- 1 file changed, 42 insertions(+), 16 deletions(-) diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationServiceImpl.java index 0c14fff..667d6d9 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationServiceImpl.java @@ -111,26 +111,52 @@ public class BatteryStationServiceImpl implements BatteryStationService { return new Result>().success(page.setRecords(list)); } + /** + * 获取或生成RSA密钥对并保存到数据库 + * + * @param stationCode 电站编码,用于标识特定的电池电站 + * @return 返回包含密钥对信息的Result对象 + */ @Override public Result> RsaSecretKey(String stationCode) { - KeyPair keyPair = KeyUtil.generateKeyPair(AsymmetricAlgorithm.RSA_ECB_PKCS1.getValue()); - String privatekeyBase64String = Base64.getEncoder().encodeToString(keyPair.getPrivate().getEncoded()); - String publickeyBase64String = Base64.getEncoder().encodeToString(keyPair.getPublic().getEncoded()); - batteryStationSecretKeyDao.delete(new QueryWrapper().eq("type", 1).eq("station_code", stationCode)); - BatteryStationSecretKey bssk = new BatteryStationSecretKey(); - bssk.setStationCode(stationCode); - bssk.setType(1); - bssk.setPrivateKey(privatekeyBase64String); - bssk.setPublicKey(publickeyBase64String); - bssk.setCtime(new Date()); - batteryStationSecretKeyDao.insert(bssk); - - Map map = new HashMap(); - map.put("publickey", publickeyBase64String); - map.put("privatekey", privatekeyBase64String); - return new Result>().success(map); + // 查询数据库中是否存在对应电站编码的密钥对 + BatteryStationSecretKey existingKey = batteryStationSecretKeyDao.selectOne( + new QueryWrapper() + .eq("type", 1) + .eq("station_code", stationCode) + ); + if (existingKey != null) { + // 如果存在密钥对,则直接返回 + Map map = new HashMap<>(); + map.put("publickey", existingKey.getPublicKey()); + map.put("privatekey", existingKey.getPrivateKey()); + return new Result>().success(map); + } else { + // 如果不存在密钥对,则生成新的密钥对 + KeyPair keyPair = KeyUtil.generateKeyPair(AsymmetricAlgorithm.RSA_ECB_PKCS1.getValue()); + // 将私钥转换为Base64编码的字符串 + String privatekeyBase64String = Base64.getEncoder().encodeToString(keyPair.getPrivate().getEncoded()); + // 将公钥转换为Base64编码的字符串 + String publickeyBase64String = Base64.getEncoder().encodeToString(keyPair.getPublic().getEncoded()); + // 创建新的电池电站密钥对象 + BatteryStationSecretKey bssk = new BatteryStationSecretKey(); + bssk.setStationCode(stationCode); + bssk.setType(1); + bssk.setPrivateKey(privatekeyBase64String); + bssk.setPublicKey(publickeyBase64String); + bssk.setCtime(new Date()); + // 将新的密钥对象插入数据库 + batteryStationSecretKeyDao.insert(bssk); + // 创建一个映射,用于存储和返回公钥和私钥 + Map map = new HashMap<>(); + map.put("publickey", publickeyBase64String); + map.put("privatekey", privatekeyBase64String); + // 返回包含密钥对信息的成功结果 + return new Result>().success(map); + } } + @Override public Result> listStation(String plateNum) {