认证加密算法php hash_hmac和java hmacSha1的问题
前提是我传入的secret, text都是一样的,java版的hmacSha1和php版hash_hmac(给传的是sha1)得出的部分值不一样。代码如下:
java代码:
public static byte[] hmac_sha1(byte[] keyBytes, byte[] text)
throws NoSuchAlgorithmException, InvalidKeyException {
Mac hmacSha1;
try {
hmacSha1 = Mac.getInstance("HmacSHA1");
} catch (NoSuchAlgorithmException nsae) {
hmacSha1 = Mac.getInstance("HMAC-SHA-1");
}
SecretKeySpec macKey = new SecretKeySpec(keyBytes, "RAW");
hmacSha1.init(macKey);
return hmacSha1.doFinal(text);
}
byte[] hash = hmac_sha1(secret, text);
php代码:
public function hmac($data, $secret, $hashFunct = 'sha1', $rawOutput = true) {
if (!in_array($hashFunct, hash_algos())) {
$hashFunct = 'sha1';
}
return hash_hmac($hashFunct, $data, $secret, $rawOutput);
}
$hash = hmac($text,$secret);
$hash = str_split($hash);
foreach ($hash as $index=>$value) {
$hash[$index] = ord($value);
}
经过多次测试发现php里得出的$hash里的元素值如果大于128时与java版就不一样了,我把$hash[$index] = ord($value);换成:
计算的结果就一样了,请知道原理的人帮忙给解释一下吧,虽然这样拼凑实现了项目需求,但是还是想知道真正的原因!
瑞凤的鸡蛋卷
12 years, 9 months ago