feat(BatteryStationServiceImpl): 实现获取或生成 RSA 密钥对功能
- 新增 RsaSecretKey 方法,根据电站编码获取或生成 RSA 密钥对 - 优化了密钥对的生成和保存逻辑,避免重复生成- 增加了对已有密钥对的查询和直接返回功能,提高效率
This commit is contained in:
parent
a6ab62fa82
commit
994179f53b
@ -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) {
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user