|
|
|
@ -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()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|