最近做了几个项目,都需要访问第三方接口,需要进行签名验证,签名验证都用到了加密算法,测试的时候都没有出现问题,但是部署到服务器上就报 签名验证失败,经过多次尝试,发现是因为编码的问题导致的。
我一开始使用的代码:
SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), "AES");
后来修改后的代码:
SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "AES");
这个就是 String类型的数据中转bytes时没有指定编码导致的。如果这样修改后,就没有问题了。