使用自己自定义的密钥报错一般是密钥超长(32位),sm4支持16位。在确定密钥无误的情况下,可将32位字符串转为16位byte数组

1
2
SymmetricCrypto sm4 = SmUtil.sm4(hexStringToByteArray(key));
String encryptHex = sm4.encryptHex(json);
1
2
3
4
5
6
7
8
9
10
11
public static byte[] hexStringToByteArray(String hexString) {
hexString = hexString.replaceAll(" ", "");
int len = hexString.length();
byte[] bytes = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
// 两位一组,表示一个字节,把这样表示的16进制字符串,还原成一个字节
bytes[i / 2] = (byte) ((Character.digit(hexString.charAt(i), 16) << 4) + Character
.digit(hexString.charAt(i + 1), 16));
}
return bytes;
}