Java和PHP之间的HMAC SHA-256差异
我正在尝试连接到web服务,我需要加密我的签名 我的java方法如下所示:Java和PHP之间的HMAC SHA-256差异,java,php,cryptography,sha256,hmac,Java,Php,Cryptography,Sha256,Hmac,我正在尝试连接到web服务,我需要加密我的签名 我的java方法如下所示: public String hashMacSha256(String message, String key) throws InvalidKeyException, NoSuchAlgorithmException, UnsupportedEncodingException { Mac sha256_HMAC = Mac.getInstance("HmacSHA256"); SecretKeySpec
public String hashMacSha256(String message, String key) throws InvalidKeyException, NoSuchAlgorithmException, UnsupportedEncodingException {
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(key.getBytes(),"HmacSHA256");
sha256_HMAC.init(secret_key);
String hash = Base64.encodeToString(sha256_HMAC.doFinal(message.getBytes()), Base64.DEFAULT);
return hash;
}
提供给我的php函数是
$signature=base64_encode(hash_hmac("sha256", trim($xmlReq), $signature_key, True));
Java结果:yn3jxxibispa+smV6zUu6KVNwnm+cbmmsnqabvos0=
Php结果:x7WuslORVY00BtoQuk1dya2bu9pMCpPMunPqPR+3HI4=
当我运行两者来比较结果时,它们是不同的。这是因为java函数错误还是?首先<代码>$signature\u key==secret\u key?$signature\u key=trim($private\u key.$ApiPassword.$TransactionId);它们都有我之前知道的默认值是的,你知道,我们没有。第二,我问的是键是否相同,而不是两种语言是否都默认为它们的默认值。然后我真的建议大家看看PHP端的
trim()
。在Java中是否有任何值?我没看到,是吗?@pavlos你提供了输出,但你忘了添加输入。