为什么HMAC sha256在PHP上返回不同的值&;Javascript
我正在尝试使用CryptoJS在Javascript中构建HMAC SHA256字符串,我的现有代码是使用Akamai库用PHP编写的 在某些情况下,我得到的结果与PHP不同&我无法理解为什么它会给我不同的结果为什么HMAC sha256在PHP上返回不同的值&;Javascript,javascript,php,sha256,hmac,cryptojs,Javascript,Php,Sha256,Hmac,Cryptojs,我正在尝试使用CryptoJS在Javascript中构建HMAC SHA256字符串,我的现有代码是使用Akamai库用PHP编写的 在某些情况下,我得到的结果与PHP不同&我无法理解为什么它会给我不同的结果 /* <php> Using native hash_hmac Generating key by concatenating char */ $signature1 = hash_hmac('SHA256',
/*
<php> Using native hash_hmac
Generating key by concatenating char
*/
$signature1 = hash_hmac('SHA256', "st=1453362060~exp=1453363260~acl=/*", chr(63));
$signature2 = hash_hmac('SHA256', "st=1453362060~exp=1453363260~acl=/*", chr(63) . chr(23));
$signature3 = hash_hmac('SHA256', "st=1453362060~exp=1453363260~acl=/*", chr(63) . chr(23) . chr(253));
/*
here is result from php
signature1 : 3e086bb48ab9aafa85661f9ce1b7dac49befddf117ce2a42d93c92b6abe513ce ( matched: same as JavaScript)
signature2 : 3667dd414a50f68f7ce083e540f27f68f7d0f18617b1fb1e4788bffeaeab59f6( matched: same as JavaScript)
signature3 : dd5a20041661046fdee871c8b9e77b3190fbbf85937c098090a1d524719b6aa9 ( not matched: diff from JavaScript)
*/
/*
<JavaScript> using CryptoJS
Generating key by concatenating three char
*/
var signature1 = CryptoJS.HmacSHA256("st=1453362060~exp=1453363260~acl=/*", String.fromCharCode(63));
var signature2 = CryptoJS.HmacSHA256("st=1453362060~exp=1453363260~acl=/*", String.fromCharCode(63) + String.fromCharCode(23));
var signature3 = CryptoJS.HmacSHA256("st=1453362060~exp=1453363260~acl=/*", String.fromCharCode(63) + String.fromCharCode(23) + String.fromCharCode(253));
/*
here is result from JavaScript
signature1 : 3e086bb48ab9aafa85661f9ce1b7dac49befddf117ce2a42d93c92b6abe513ce ( matched: same as php)
signature2 : 3667dd414a50f68f7ce083e540f27f68f7d0f18617b1fb1e4788bffeaeab59f6 ( matched: same as php)
signature3 : 28075dc75de9f22f83e87772f09a89efb007f2e298167686832eff122ef6eb08 ( not matched: diff from php)
*/
/*
使用本机hash_hmac
通过连接字符生成密钥
*/
$signature1=hash_hmac('SHA256',“st=1453362060~exp=1453363260~acl=/*”,chr(63));
$signature2=hash_hmac('SHA256',“st=1453362060~exp=1453363260~acl=/*”,chr(63).chr(23));
$signature3=hash_hmac('SHA256',“st=1453362060~exp=1453363260~acl=/*”,chr(63).chr(23).chr(253));
/*
下面是php的结果
签名1:3E086BB48AB9AAFA85661F9CE1B7DAC49BEFDD17CE2A42D93C92B6ABE513CE(匹配:与JavaScript相同)
签名2:3667dd414a50f68f7ce083e540f27f68f7d0f18617b1fb1e4788bffeaeab59f6(匹配:与JavaScript相同)
签名3:dd5a20041661046fdee871c8b9e77b3190fbbf85937c098090a1d524719b6aa9(不匹配:与JavaScript不同)
*/
/*
使用CryptoJS
通过连接三个字符生成密钥
*/
var signature1=CryptoJS.HmacSHA256(“st=1453362060~exp=1453363260~acl=/*”,String.fromCharCode(63));
var signature2=CryptoJS.HmacSHA256(“st=1453362060~exp=1453363260~acl=/*”,String.fromCharCode(63)+String.fromCharCode(23));
var signature3=CryptoJS.HmacSHA256(“st=1453362060~exp=1453363260~acl=/*”,String.fromCharCode(63)+String.fromCharCode(23)+String.fromCharCode(253));
/*
下面是JavaScript的结果
签名1:3E086BB48AB9AAFA85661F9CE1B7DAC49BEFDD17CE2A42D93C92B6ABE513CE(匹配:与php相同)
签名2:3667dd414a50f68f7ce083e540f27f68f7d0f18617b1fb1e4788bffeaeab59f6(匹配:与php相同)
签名3:28075DC75DE9F22F83E87772F09A89EFB007F2E2981676832EFF122EF6EB08(不匹配:与php不同)
*/
前两个HMAC值是匹配的,但当我附加第三个字符时,它会产生不同的结果,请任何人解释一下为什么会这样
这里是&
CryptoJS在创建哈希sha256时,在“Key”中添加UTF8编码,以便获得不同的值 如果我在PHP端包装utf8_编码,那么我们将得到与JavaScript相同的hmac值
// <php>
$key = chr(63) . chr(23) . chr(253);
signature3 = hash_hmac('SHA256', "st=1453362060~exp=1453363260~acl=/*", utf8_encode($key));
//
$key=chr(63)。chr(23)。chr(253);
signature3=hash_hmac('SHA256',“st=1453362060~exp=1453363260~acl=/*”,utf8_encode($key));
如何让CryptoJS获得PHP结果(相反)?