From ced9ce3fecf50a44ef789c9bee3fce88af8b4ac6 Mon Sep 17 00:00:00 2001 From: vincent Date: Wed, 23 Sep 2026 14:53:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=86=E8=AF=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thirdparty/IPasswordPartyService.java | 28 +++------- .../service/thirdparty/PasswordPartyDemo.java | 24 ++------ .../impl/PasswordPartyServiceImpl.java | 55 ++++++++----------- 3 files changed, 37 insertions(+), 70 deletions(-) diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/thirdparty/IPasswordPartyService.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/thirdparty/IPasswordPartyService.java index cc6f52fb..9814505a 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/thirdparty/IPasswordPartyService.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/thirdparty/IPasswordPartyService.java @@ -21,76 +21,64 @@ public interface IPasswordPartyService { /** * HSM - 对称加密 * - * @param keyIndex 用户密钥号,填0时使用keyData作为密钥 - * @param algType 对称算法类型(SM1或SM4) * @param key 外部密钥(keyIndex为0时生效,Hex 16进制) * @param iv IV值,CBC/CFB/OFB模式时必传(Hex 16进制) * @param inputData 加密原文(Hex 16进制) * @return 对称加密结果 */ - SymmetryEncryptVo symmetryEncrypt(Integer keyIndex, int algType, String key, String iv, String inputData); + SymmetryEncryptVo symmetryEncrypt(String key, String iv, String inputData); /** * HSM - 对称解密 * - * @param keyIndex 用户密钥号,填0时使用keyData作为密钥 - * @param algType 对称算法类型(SM1或SM4) * @param key 外部密钥(keyIndex为0时生效,Hex 16进制) * @param iv IV值,CBC/CFB/OFB模式时必传(Hex 16进制) * @param inputData 解密密文(Hex 16进制) * @return 对称解密结果 */ - SymmetryEncryptVo symmetryDecrypt(Integer keyIndex, int algType, String key, String iv, String inputData); + SymmetryEncryptVo symmetryDecrypt(String key, String iv, String inputData); /** * HSM - SM2签名 * - * @param keyIndex 密钥索引 * @param plainData 明文摘要(先使用杂凑接口计算摘要,Hex 16进制类型) * @return 签名值(Hex 16进制类型) */ - String sm2SignData(Integer keyIndex, String plainData); + String sm2SignData(String plainData); /** * HSM - SM2验签 * - * @param algType 算法类型 * @param publicKey 公钥(使用导出公钥接口获取,Hex 16进制类型) * @param signValue 签名值(Hex 16进制类型) * @param plainData 明文摘要(先使用杂凑接口计算摘要,Hex 16进制类型) * @return true=验证通过, false=验证失败 */ - boolean sm2Verify(Integer algType, String publicKey, String signValue, String plainData); + boolean sm2Verify(String publicKey, String signValue, String plainData); /** * HSM - 非对称加密 * - * @param algType 算法ID(请查阅算法字典) * @param publcKey 公钥(Hex 16进制类型) * @param data 明文(Hex 16进制类型) * @return 加密密文(Hex 16进制类型) */ - String externalEncrypt(Integer algType, String publcKey, String data); + String externalEncrypt(String publcKey, String data); /** * HSM - 非对称解密 * - * @param keyIndex 密钥索引 - * @param algId 算法ID(请查阅算法字典) - * @param enc 密文(Hex 16进制类型) + * @param enc 密文(Hex 16进制类型) * @return 解密明文(Hex 16进制类型) */ - String internalDecrypt(Integer keyIndex, Integer algId, String enc); + String internalDecrypt(String enc); /** * HSM - HMAC摘要 * - * @param keyIndex 密钥索引(必填) * @param key 密钥,非必传(Hex 16进制类型) - * @param algType 算法ID标签,请使用SM3(查阅算法字典) * @param inputData 明文摘要(Hex 16进制类型,必填) * @return HMAC值(Hex 16进制类型) */ - String hmacWithIndex(Integer keyIndex, String key, Integer algType, String inputData); - + String hmacWithIndex(String key, String inputData); } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/thirdparty/PasswordPartyDemo.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/thirdparty/PasswordPartyDemo.java index 50e06439..722141f5 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/thirdparty/PasswordPartyDemo.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/thirdparty/PasswordPartyDemo.java @@ -21,18 +21,6 @@ public class PasswordPartyDemo { /** HSM 密码服务平台地址,按实际环境修改 */ private static final String BASE_URL = "http://localhost:8080"; - /** 测试用密钥索引 */ - private static final int KEY_INDEX = 1; - - /** SM4 算法ID(按实际算法字典修改) */ - private static final int ALG_SM4 = 1; - - /** SM2 算法ID */ - private static final int ALG_SM2 = 2; - - /** SM3 算法ID */ - private static final int ALG_SM3 = 4; - private static IPasswordPartyService service; /** @@ -90,12 +78,12 @@ public class PasswordPartyDemo { System.out.println("----- 2. 对称加密 + 对称解密 -----"); String plainHex = "31323334353637383132333435363738"; - SymmetryEncryptVo encryptResult = service.symmetryEncrypt(KEY_INDEX, ALG_SM4, null, null, plainHex); + SymmetryEncryptVo encryptResult = service.symmetryEncrypt(null, null, plainHex); System.out.println("对称加密原文: " + plainHex); System.out.println("对称加密密文: " + encryptResult.getOutData()); assertNotBlank("encryptOutData", encryptResult.getOutData()); - SymmetryEncryptVo decryptResult = service.symmetryDecrypt(KEY_INDEX, ALG_SM4, null, null, encryptResult.getOutData()); + SymmetryEncryptVo decryptResult = service.symmetryDecrypt(null, null, encryptResult.getOutData()); System.out.println("对称解密结果: " + decryptResult.getOutData()); assertNotBlank("decryptOutData", decryptResult.getOutData()); @@ -114,7 +102,7 @@ public class PasswordPartyDemo { System.out.println("----- 3. SM2签名 + SM2验签 -----"); String plainDataHex = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"; - String signValue = service.sm2SignData(KEY_INDEX, plainDataHex); + String signValue = service.sm2SignData(plainDataHex); System.out.println("SM2签名原文(摘要): " + plainDataHex); System.out.println("SM2签名值: " + signValue); assertNotBlank("signData", signValue); @@ -131,12 +119,12 @@ public class PasswordPartyDemo { String plainHex = "31323334"; String publicKey = getTestPublicKey(); - String encryptData = service.externalEncrypt(ALG_SM2, publicKey, plainHex); + String encryptData = service.externalEncrypt(publicKey, plainHex); System.out.println("非对称加密原文: " + plainHex); System.out.println("非对称加密密文: " + encryptData); assertNotBlank("encryptData", encryptData); - String decrypted = service.internalDecrypt(KEY_INDEX, ALG_SM2, encryptData); + String decrypted = service.internalDecrypt(encryptData); System.out.println("非对称解密结果: " + decrypted); assertNotBlank("decrypted", decrypted); @@ -155,7 +143,7 @@ public class PasswordPartyDemo { System.out.println("----- 5. HMAC摘要 -----"); String inputDataHex = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"; - String hmac = service.hmacWithIndex(KEY_INDEX, null, ALG_SM3, inputDataHex); + String hmac = service.hmacWithIndex(null, inputDataHex); System.out.println("HMAC输入摘要: " + inputDataHex); System.out.println("HMAC输出值: " + hmac); assertNotBlank("hmac", hmac); diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/thirdparty/impl/PasswordPartyServiceImpl.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/thirdparty/impl/PasswordPartyServiceImpl.java index 71672076..83a4bea8 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/thirdparty/impl/PasswordPartyServiceImpl.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/thirdparty/impl/PasswordPartyServiceImpl.java @@ -24,6 +24,9 @@ public class PasswordPartyServiceImpl implements IPasswordPartyService { private final PasswordPartyConfig passwordPartyConfig; + private static final int KEY_INDEX = 5; + private static final String ALG_TYPE = "SM4"; + /** * 生成随机数 * @@ -42,16 +45,14 @@ public class PasswordPartyServiceImpl implements IPasswordPartyService { /** * 对称加密 * - * @param keyIndex 用户密钥号,填0时使用keyData做密钥 - * @param algType 对称算法SM1或SM4 * @param key 外部密钥,keyIndex为0时生效(Hex 16进制类型) * @param iv IV值,CBC/CFB/OFB模式时必传(Hex 16进制类型) * @param inputData 加密原文(Hex 16进制类型) * @return 对称加密结果 */ @Override - public SymmetryEncryptVo symmetryEncrypt(Integer keyIndex, int algType, String key, String iv, String inputData) { - JSONObject params = buildSymmetryParams(keyIndex, algType, key, iv, inputData); + public SymmetryEncryptVo symmetryEncrypt(String key, String iv, String inputData) { + JSONObject params = buildSymmetryParams(key, iv, inputData); JSONObject data = callHsmApi("/hsm/api/symmetryEncrypt", params, "对称加密"); return buildSymmetryEncryptVo(data); @@ -60,16 +61,14 @@ public class PasswordPartyServiceImpl implements IPasswordPartyService { /** * 对称解密 * - * @param keyIndex 用户密钥号,填0时使用keyData做密钥 - * @param algType 对称算法SM1或SM4 * @param key 外部密钥,keyIndex为0时生效(Hex 16进制类型) * @param iv IV值,CBC/CFB/OFB模式时必传(Hex 16进制类型) * @param inputData 解密原文(Hex 16进制类型) * @return 对称解密结果 */ @Override - public SymmetryEncryptVo symmetryDecrypt(Integer keyIndex, int algType, String key, String iv, String inputData) { - JSONObject params = buildSymmetryParams(keyIndex, algType, key, iv, inputData); + public SymmetryEncryptVo symmetryDecrypt(String key, String iv, String inputData) { + JSONObject params = buildSymmetryParams(key, iv, inputData); JSONObject data = callHsmApi("/hsm/api/symmetryDecrypt", params, "对称解密"); return buildSymmetryEncryptVo(data); @@ -78,14 +77,13 @@ public class PasswordPartyServiceImpl implements IPasswordPartyService { /** * SM2签名 * - * @param keyIndex 密钥索引 * @param plainData 明文摘要,先使用杂凑接口计算摘要(Hex 16进制类型) * @return 签名值(Hex 16进制类型) */ @Override - public String sm2SignData(Integer keyIndex, String plainData) { + public String sm2SignData(String plainData) { JSONObject params = new JSONObject(); - params.put("keyIndex", keyIndex); + params.put("keyIndex", KEY_INDEX); params.put("plainData", plainData); JSONObject data = callHsmApi("/hsm/api/SM2SignData", params, "SM2签名"); @@ -95,16 +93,15 @@ public class PasswordPartyServiceImpl implements IPasswordPartyService { /** * SM2验签 * - * @param algType 算法类型 * @param publicKey 公钥,使用导出公钥接口获取(Hex 16进制类型) * @param signValue 签名值(Hex 16进制类型) * @param plainData 明文摘要,先使用杂凑接口计算摘要(Hex 16进制类型) * @return true=验证通过 */ @Override - public boolean sm2Verify(Integer algType, String publicKey, String signValue, String plainData) { + public boolean sm2Verify(String publicKey, String signValue, String plainData) { JSONObject params = new JSONObject(); - params.put("algType", algType); + params.put("algType", ALG_TYPE); params.put("publicKey", publicKey); params.put("signValue", signValue); params.put("plainData", plainData); @@ -116,15 +113,14 @@ public class PasswordPartyServiceImpl implements IPasswordPartyService { /** * 非对称加密 * - * @param algType 算法ID * @param publcKey 公钥(Hex 16进制类型) * @param data 明文(Hex 16进制类型) * @return 加密密文(Hex 16进制类型) */ @Override - public String externalEncrypt(Integer algType, String publcKey, String data) { + public String externalEncrypt(String publcKey, String data) { JSONObject params = new JSONObject(); - params.put("algType", algType); + params.put("algType", ALG_TYPE); params.put("publcKey", publcKey); params.put("data", data); @@ -135,16 +131,14 @@ public class PasswordPartyServiceImpl implements IPasswordPartyService { /** * 非对称解密 * - * @param keyIndex 密钥索引 - * @param algId 算法ID - * @param enc 密文(Hex 16进制类型) + * @param enc 密文(Hex 16进制类型) * @return 解密明文(Hex 16进制类型) */ @Override - public String internalDecrypt(Integer keyIndex, Integer algId, String enc) { + public String internalDecrypt(String enc) { JSONObject params = new JSONObject(); - params.put("keyIndex", keyIndex); - params.put("algId", algId); + params.put("keyIndex", KEY_INDEX); + params.put("algId", ALG_TYPE); params.put("enc", enc); JSONObject data = callHsmApi("/hsm/api/internalDecrypt", params, "非对称解密"); @@ -154,20 +148,18 @@ public class PasswordPartyServiceImpl implements IPasswordPartyService { /** * HMAC摘要 * - * @param keyIndex 密钥索引(必填) * @param key 密钥,非必传(Hex 16进制类型) - * @param algType 算法ID标签,请使用SM3 * @param inputData 明文摘要(Hex 16进制类型,必填) * @return HMAC值(Hex 16进制类型) */ @Override - public String hmacWithIndex(Integer keyIndex, String key, Integer algType, String inputData) { + public String hmacWithIndex(String key, String inputData) { JSONObject params = new JSONObject(); - params.put("keyIndex", keyIndex); + params.put("keyIndex", KEY_INDEX); if (key != null) { params.put("key", key); } - params.put("algType", algType); + params.put("algType", "SM3"); params.put("inputData", inputData); JSONObject data = callHsmApi("/hsm/api/HmacWithIndex", params, "HMAC"); @@ -177,10 +169,10 @@ public class PasswordPartyServiceImpl implements IPasswordPartyService { /** * 构建对称加密/解密的公共请求参数 */ - private JSONObject buildSymmetryParams(Integer keyIndex, int algType, String key, String iv, String inputData) { + private JSONObject buildSymmetryParams(String key, String iv, String inputData) { JSONObject params = new JSONObject(); - params.put("keyIndex", keyIndex); - params.put("algType", algType); + params.put("keyIndex", KEY_INDEX); + params.put("algType", ALG_TYPE); if (key != null) { params.put("key", key); } @@ -260,5 +252,4 @@ public class PasswordPartyServiceImpl implements IPasswordPartyService { throw new BaseException("HSM" + apiName + "异常: " + e.getMessage()); } } - }