feat(BatteryStationServiceImpl): 实现获取或生成 RSA 密钥对功能

- 新增 RsaSecretKey 方法,根据电站编码获取或生成 RSA 密钥对
- 优化了密钥对的生成和保存逻辑,避免重复生成- 增加了对已有密钥对的查询和直接返回功能,提高效率
This commit is contained in:
tzy 2025-04-09 17:31:43 +08:00
parent a6ab62fa82
commit 994179f53b

View File

@ -111,26 +111,52 @@ public class BatteryStationServiceImpl implements BatteryStationService {
return new Result<List<BatteryStation>>().success(page.setRecords(list)); return new Result<List<BatteryStation>>().success(page.setRecords(list));
} }
/**
* 获取或生成RSA密钥对并保存到数据库
*
* @param stationCode 电站编码用于标识特定的电池电站
* @return 返回包含密钥对信息的Result对象
*/
@Override @Override
public Result<Map<String, String>> RsaSecretKey(String stationCode) { public Result<Map<String, String>> RsaSecretKey(String stationCode) {
KeyPair keyPair = KeyUtil.generateKeyPair(AsymmetricAlgorithm.RSA_ECB_PKCS1.getValue()); // 查询数据库中是否存在对应电站编码的密钥对
String privatekeyBase64String = Base64.getEncoder().encodeToString(keyPair.getPrivate().getEncoded()); BatteryStationSecretKey existingKey = batteryStationSecretKeyDao.selectOne(
String publickeyBase64String = Base64.getEncoder().encodeToString(keyPair.getPublic().getEncoded()); new QueryWrapper<BatteryStationSecretKey>()
batteryStationSecretKeyDao.delete(new QueryWrapper<BatteryStationSecretKey>().eq("type", 1).eq("station_code", stationCode)); .eq("type", 1)
BatteryStationSecretKey bssk = new BatteryStationSecretKey(); .eq("station_code", stationCode)
bssk.setStationCode(stationCode); );
bssk.setType(1); if (existingKey != null) {
bssk.setPrivateKey(privatekeyBase64String); // 如果存在密钥对则直接返回
bssk.setPublicKey(publickeyBase64String); Map<String, String> map = new HashMap<>();
bssk.setCtime(new Date()); map.put("publickey", existingKey.getPublicKey());
batteryStationSecretKeyDao.insert(bssk); map.put("privatekey", existingKey.getPrivateKey());
return new Result<Map<String, String>>().success(map);
Map<String, String> map = new HashMap<String, String>(); } else {
map.put("publickey", publickeyBase64String); // 如果不存在密钥对则生成新的密钥对
map.put("privatekey", privatekeyBase64String); KeyPair keyPair = KeyUtil.generateKeyPair(AsymmetricAlgorithm.RSA_ECB_PKCS1.getValue());
return new Result<Map<String,String>>().success(map); // 将私钥转换为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<String, String> map = new HashMap<>();
map.put("publickey", publickeyBase64String);
map.put("privatekey", privatekeyBase64String);
// 返回包含密钥对信息的成功结果
return new Result<Map<String, String>>().success(map);
}
} }
@Override @Override
public Result<List<BatteryStationVO>> listStation(String plateNum) { public Result<List<BatteryStationVO>> listStation(String plateNum) {