我需要在Java中获取字符串的哈希值,与PHP的hash_hmac相同。
这是我的PHP示例:
$secret_key = 'foo';
$sig_str = 'bar';
$hash = hash_hmac('md5', $sig_str, $secret_key);
这就是我为Java发现的:
SecretKeySpec keySpec = new SecretKeySpec("foo".getBytes(), "HmacMD5");
Mac mac = Mac.getInstance(keySpec.getAlgorithm());
mac.init(keySpec);
String result = new BASE64Encoder().encode(mac.doFinal("bar".getBytes()));
但结果不同。我错过了什么?
答案 0 :(得分:0)
在此处找到解决方案:java equivalent to php's hmac-SHA1
问题出在BASE64Encoder中。使用
for (byte b : digest) {
System.out.format("%02x", b);
}
System.out.println();
或
new BigInteger(digest).toString(16);
代替。