2012-06-12 43 views
1

这是我的问题:Base64_encode不同之间的Java和PHP

我有一个JAVA函数来生成一个加密的字符串。我必须在PHP中做同样的事情。

我的Java功能:

String generateSignature() { 
    byte[] Sequence = ("hello").getBytes("UTF-8"); 
    Mac HMAC = Mac.getInstance("HMACSHA256"); 
    HMAC.init("SECRET_KEY"); 
    byte[] Hash = HMAC.doFinal(Sequence); 
    String Signature = new String(Base64.encodeBase64(Hash)); 
    return Signature; 
} 

我的PHP函数:

function generateSignature() { 
    $sequence = "hello"; 
    $encrypted = hash_hmac('sha256', $sequence, "SECRET_KEY"); 
    return base64_encode($encrypted); 
} 

的两个函数的返回值是不一样的。我注意到,在编码到64位之前,两个函数都有相同的结果。所以,对我而言,问题不在于密钥的生成,而在于编码。

有人能帮忙吗?

+8

有什么区别? – Esailija

+0

你好..我认为你正在与woocommerce apis合作。 我也有同样的问题。你是否成功地用java连接到apis?请帮我,我得到签名不匹配错误 –

回答

1

答案在documentation为PHP函数hash_hmac。

设置为TRUE时,输出原始二进制数据。 FALSE输出小写的hexits。

通过“true”作为最终参数。哈希是二元的。将它们转换为字符串时,通常以十六进制编码。但在这种情况下,您将使用base-64进行编码,因此您需要原始二进制格式。

相关问题