Browse Source

密码服务平台接口优化

dev-V1.0.9
vincent 1 month ago
parent
commit
59d47f9be1
  1. 10
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/thirdparty/IPasswordPartyService.java
  2. 6
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/thirdparty/PasswordPartyDemo.java
  3. 26
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/thirdparty/impl/PasswordPartyServiceImpl.java

10
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/thirdparty/IPasswordPartyService.java

@ -21,22 +21,19 @@ public interface IPasswordPartyService {
/** /**
* HSM - 对称加密 * HSM - 对称加密
* *
* @param key 外部密钥(keyIndex为0时生效,Hex 16进制)
* @param iv IV值,CBC/CFB/OFB模式时必传(Hex 16进制)
* @param inputData 加密原文(Hex 16进制) * @param inputData 加密原文(Hex 16进制)
* @return 对称加密结果 * @return 对称加密结果
*/ */
SymmetryEncryptVo symmetryEncrypt(String key, String iv, String inputData); SymmetryEncryptVo symmetryEncrypt( String inputData);
/** /**
* HSM - 对称解密 * HSM - 对称解密
* *
* @param key 外部密钥(keyIndex为0时生效,Hex 16进制)
* @param iv IV值,CBC/CFB/OFB模式时必传(Hex 16进制) * @param iv IV值,CBC/CFB/OFB模式时必传(Hex 16进制)
* @param inputData 解密密文(Hex 16进制) * @param inputData 解密密文(Hex 16进制)
* @return 对称解密结果 * @return 对称解密结果
*/ */
SymmetryEncryptVo symmetryDecrypt(String key, String iv, String inputData); SymmetryEncryptVo symmetryDecrypt(String iv, String inputData);
/** /**
* HSM - SM2签名 * HSM - SM2签名
@ -76,9 +73,8 @@ public interface IPasswordPartyService {
/** /**
* HSM - HMAC摘要 * HSM - HMAC摘要
* *
* @param key 密钥,非必传(Hex 16进制类型)
* @param inputData 明文摘要(Hex 16进制类型,必填) * @param inputData 明文摘要(Hex 16进制类型,必填)
* @return HMAC值(Hex 16进制类型) * @return HMAC值(Hex 16进制类型)
*/ */
String hmacWithIndex(String key, String inputData); String hmacWithIndex(String inputData);
} }

6
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/thirdparty/PasswordPartyDemo.java

@ -78,12 +78,12 @@ public class PasswordPartyDemo {
System.out.println("----- 2. 对称加密 + 对称解密 -----"); System.out.println("----- 2. 对称加密 + 对称解密 -----");
String plainHex = "31323334353637383132333435363738"; String plainHex = "31323334353637383132333435363738";
SymmetryEncryptVo encryptResult = service.symmetryEncrypt(null, null, plainHex); SymmetryEncryptVo encryptResult = service.symmetryEncrypt(plainHex);
System.out.println("对称加密原文: " + plainHex); System.out.println("对称加密原文: " + plainHex);
System.out.println("对称加密密文: " + encryptResult.getOutData()); System.out.println("对称加密密文: " + encryptResult.getOutData());
assertNotBlank("encryptOutData", encryptResult.getOutData()); assertNotBlank("encryptOutData", encryptResult.getOutData());
SymmetryEncryptVo decryptResult = service.symmetryDecrypt(null, null, encryptResult.getOutData()); SymmetryEncryptVo decryptResult = service.symmetryDecrypt(null, encryptResult.getOutData());
System.out.println("对称解密结果: " + decryptResult.getOutData()); System.out.println("对称解密结果: " + decryptResult.getOutData());
assertNotBlank("decryptOutData", decryptResult.getOutData()); assertNotBlank("decryptOutData", decryptResult.getOutData());
@ -143,7 +143,7 @@ public class PasswordPartyDemo {
System.out.println("----- 5. HMAC摘要 -----"); System.out.println("----- 5. HMAC摘要 -----");
String inputDataHex = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"; String inputDataHex = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855";
String hmac = service.hmacWithIndex(null, inputDataHex); String hmac = service.hmacWithIndex(inputDataHex);
System.out.println("HMAC输入摘要: " + inputDataHex); System.out.println("HMAC输入摘要: " + inputDataHex);
System.out.println("HMAC输出值: " + hmac); System.out.println("HMAC输出值: " + hmac);
assertNotBlank("hmac", hmac); assertNotBlank("hmac", hmac);

26
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/thirdparty/impl/PasswordPartyServiceImpl.java

@ -25,7 +25,7 @@ public class PasswordPartyServiceImpl implements IPasswordPartyService {
private final PasswordPartyConfig passwordPartyConfig; private final PasswordPartyConfig passwordPartyConfig;
private static final int KEY_INDEX = 5; private static final int KEY_INDEX = 5;
private static final String ALG_TYPE = "SM4"; private static final String ALG_TYPE = "SM4-CBC";
/** /**
* 生成随机数 * 生成随机数
@ -37,7 +37,6 @@ public class PasswordPartyServiceImpl implements IPasswordPartyService {
public String generateRandom(int length) { public String generateRandom(int length) {
JSONObject params = new JSONObject(); JSONObject params = new JSONObject();
params.put("length", length); params.put("length", length);
JSONObject data = callHsmApi("/hsm/api/GenerateRandom", params, "生成随机数"); JSONObject data = callHsmApi("/hsm/api/GenerateRandom", params, "生成随机数");
return data.getString("random"); return data.getString("random");
} }
@ -45,14 +44,13 @@ public class PasswordPartyServiceImpl implements IPasswordPartyService {
/** /**
* 对称加密 * 对称加密
* *
* @param key 外部密钥,keyIndex为0时生效(Hex 16进制类型)
* @param iv IV值,CBC/CFB/OFB模式时必传(Hex 16进制类型)
* @param inputData 加密原文(Hex 16进制类型) * @param inputData 加密原文(Hex 16进制类型)
* @return 对称加密结果 * @return 对称加密结果
*/ */
@Override @Override
public SymmetryEncryptVo symmetryEncrypt(String key, String iv, String inputData) { public SymmetryEncryptVo symmetryEncrypt(String inputData) {
JSONObject params = buildSymmetryParams(key, iv, inputData); String iv = generateRandom(16);
JSONObject params = buildSymmetryParams(iv, inputData);
JSONObject data = callHsmApi("/hsm/api/symmetryEncrypt", params, "对称加密"); JSONObject data = callHsmApi("/hsm/api/symmetryEncrypt", params, "对称加密");
return buildSymmetryEncryptVo(data); return buildSymmetryEncryptVo(data);
@ -61,14 +59,13 @@ public class PasswordPartyServiceImpl implements IPasswordPartyService {
/** /**
* 对称解密 * 对称解密
* *
* @param key 外部密钥,keyIndex为0时生效(Hex 16进制类型)
* @param iv IV值,CBC/CFB/OFB模式时必传(Hex 16进制类型) * @param iv IV值,CBC/CFB/OFB模式时必传(Hex 16进制类型)
* @param inputData 解密原文(Hex 16进制类型) * @param inputData 解密原文(Hex 16进制类型)
* @return 对称解密结果 * @return 对称解密结果
*/ */
@Override @Override
public SymmetryEncryptVo symmetryDecrypt(String key, String iv, String inputData) { public SymmetryEncryptVo symmetryDecrypt(String iv, String inputData) {
JSONObject params = buildSymmetryParams(key, iv, inputData); JSONObject params = buildSymmetryParams(iv, inputData);
JSONObject data = callHsmApi("/hsm/api/symmetryDecrypt", params, "对称解密"); JSONObject data = callHsmApi("/hsm/api/symmetryDecrypt", params, "对称解密");
return buildSymmetryEncryptVo(data); return buildSymmetryEncryptVo(data);
@ -148,17 +145,13 @@ public class PasswordPartyServiceImpl implements IPasswordPartyService {
/** /**
* HMAC摘要 * HMAC摘要
* *
* @param key 密钥,非必传(Hex 16进制类型)
* @param inputData 明文摘要(Hex 16进制类型,必填) * @param inputData 明文摘要(Hex 16进制类型,必填)
* @return HMAC值(Hex 16进制类型) * @return HMAC值(Hex 16进制类型)
*/ */
@Override @Override
public String hmacWithIndex(String key, String inputData) { public String hmacWithIndex(String inputData) {
JSONObject params = new JSONObject(); JSONObject params = new JSONObject();
params.put("keyIndex", KEY_INDEX); params.put("keyIndex", KEY_INDEX);
if (key != null) {
params.put("key", key);
}
params.put("algType", "SM3"); params.put("algType", "SM3");
params.put("inputData", inputData); params.put("inputData", inputData);
@ -169,13 +162,10 @@ public class PasswordPartyServiceImpl implements IPasswordPartyService {
/** /**
* 构建对称加密/解密的公共请求参数 * 构建对称加密/解密的公共请求参数
*/ */
private JSONObject buildSymmetryParams(String key, String iv, String inputData) { private JSONObject buildSymmetryParams(String iv, String inputData) {
JSONObject params = new JSONObject(); JSONObject params = new JSONObject();
params.put("keyIndex", KEY_INDEX); params.put("keyIndex", KEY_INDEX);
params.put("algType", ALG_TYPE); params.put("algType", ALG_TYPE);
if (key != null) {
params.put("key", key);
}
if (iv != null) { if (iv != null) {
params.put("iv", iv); params.put("iv", iv);
} }

Loading…
Cancel
Save