三方提供加密方法如下
protected static byte[] innerSM4Encrypt(byte[] src, byte[] key) throws Exception{
byte[] dest = null;
****return dest;
}/**
* SM4加密入口
* @param src
* @param key
* @return
* @throws Exception
*/
public static String sm4Encrypt(String src, String key) throws Exception {
byte []tempBytes = innerSM4Encrypt(src.getBytes(), key.getBytes());
return Base64.encodeBase64String(tempBytes);
}
对方接收到信息之后,进行解密后,参数校验不通过,后来查看日志发现中文解密乱码了。
但是在测试环境和本地环境联调时数据均正常传输,到灰度环境就出现这个问题。
于是双方均拿报文下来在本地解析也还是乱码。后面对加密前的参数编码也对照过,发现没问题。最后去对照主机配置编码,发现三方那边的编码是utf-8,而我这边灰度环境的编码是GBK。后来回来一品发现了一个问题。
byte []tempBytes = innerSM4Encrypt(src.getBytes(), key.getBytes());
在将字符串转换成二进制编码的时候,不设置编码的话,会自动获取系统的编码传输。因此在转换编码时需要设置编码才能正常将字符信息正常解密。
byte []tempBytes = innerSM4Encrypt(src.getBytes("utf-8"), key.getBytes("utf-8"));