修改:利元亨现场数据库密码加密

This commit is contained in:
yangyang01000846
2026-01-22 14:42:10 +08:00
parent cab634e401
commit 2b4da7d341
10 changed files with 76 additions and 24 deletions

View File

@@ -207,13 +207,14 @@ public class AESUtil {
public static void main(String[] args) {
try {
// 优先读取JVM参数然后环境变量参数没有就报错
// String spdmEnkey = "H7qGt/DO3VdaAVKzY3PNvQ==";
String spdmEnkey = StringUtils.isBlank(System.getProperty("spdm.enkey"))?
System.getenv("spdm.enkey"):System.getProperty("spdm.enkey");
if(StringUtils.isBlank(spdmEnkey)){
throw new RuntimeException("spdm加密配置密钥读取失败");
}
System.out.println("密钥是:"+spdmEnkey);
String ret = encodeNew("我是原文8899",spdmEnkey);
String ret = encodeNew("EP_DM@123.COM",spdmEnkey);
System.out.println("encode:" + ret);
String raw = decodeNew(ret,spdmEnkey);
System.out.println("decode:" + raw);

View File

@@ -0,0 +1,54 @@
package com.sdm.common.utils;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.spec.KeySpec;
import java.util.Base64;
public class RandomByteUtils {
public static void main(String[] args) throws Exception {
// 你的原始12字节密钥
byte[] original12BytesKey = new byte[12];
// 示例填充随机值模拟你的12字节密钥实际替换为你的真实密钥
new java.security.SecureRandom().nextBytes(original12BytesKey);
// 方案1将12字节密钥扩展为16字节128位的合法AES密钥
SecretKey validAesKey = generateValidAesKey(original12BytesKey, 16);
// 验证密钥长度输出16
byte[] encoded = validAesKey.getEncoded();
System.out.println("合法AES密钥:"+Base64.getEncoder().encodeToString(encoded));
System.out.println("合法AES密钥长度字节: " + validAesKey.getEncoded().length);
}
/**
* 将任意长度的原始密钥派生为指定长度的合法AES密钥
* @param originalKey 原始密钥如12字节
* @param targetLength 目标长度16/24/32
* @return 合法AES密钥
*/
private static SecretKey generateValidAesKey(byte[] originalKey, int targetLength) throws Exception {
// 盐值(随机生成,实际使用时建议固定或持久化)
byte[] salt = new byte[16];
new java.security.SecureRandom().nextBytes(salt);
// PBKDF2密钥派生参数迭代次数建议≥10000
KeySpec spec = new PBEKeySpec(
new String(originalKey).toCharArray(), // 原始密钥转为字符数组
salt, // 盐值
65536, // 迭代次数
targetLength * 8 // 目标密钥长度(位)
);
// 生成派生密钥
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
byte[] derivedKey = factory.generateSecret(spec).getEncoded();
// 转换为AES密钥
return new SecretKeySpec(derivedKey, "AES");
}
}