繁体   English   中英

hash_hmac(PHP)vs hex_hmac_sha1(Javascript)

[英]hash_hmac (PHP) vs hex_hmac_sha1 (Javascript)

我是新来的,我有疑问。

你能告诉我为什么hex_hmac_sha1 (Javascript中的函数)不能和hash_hmac (PHP中的函数)一样工作。

如果它是Az字母,一切都好,但对其他角色不好。

例如:

使用Javascript

<script type="text/javascript" src="https://online.ingbank.pl/mobi/js/sha1.js"></script>
<script>
document.write(hex_hmac_sha1("1492343027",'a')+"<br />");
document.write(hex_hmac_sha1("1492343027",'ą')+"<br />");
document.write(hex_hmac_sha1("1492343027",'c')+"<br />");
document.write(hex_hmac_sha1("1492343027",'ć')+"<br />");
</script>

输出:

f75d4cbfbfda2476a9c92fff10fdf0e726ee06ab
206e608ecaf23a9575ca81a86e3afd72eca243a0
73e0dc1dd914b1386a5f2624883caad41025da07
86dc107aac5cb5c17a846defd651a3eb53d66a44

PHP

echo hash_hmac("sha1", 'a', "1492343027").'<br />'; 
echo hash_hmac("sha1", 'ą', "1492343027").'<br />'; 
echo hash_hmac("sha1", 'c', "1492343027").'<br />'; 
echo hash_hmac("sha1", 'ć', "1492343027").'<br />'; 

输出:

f75d4cbfbfda2476a9c92fff10fdf0e726ee06ab
8b353bb4c891d73ae9be09d0653e2564e0dff243
73e0dc1dd914b1386a5f2624883caad41025da07
52278a6e8676e8f3c667082411cfa04519c4bab1

对于'a'和'c',一切都还可以,但是'''和'ć'正在发生什么?

感谢帮助

PHP和JS实现之间的区别在于,PHP将UTF-8字符串作为8位字符处理,而在JS中,每个字符串都由Unicode表示。

请尝试一下:

hash_hmac("sha1", 'ą', "1492343027") == hex_hmac_sha1("1492343027",'\\xC4\\x85')

的jsfiddle

UTF 8 hex来自 - http://www.charbase.com/0105-unicode-latin-small-letter-a-with-ogonek

JS

hex_hmac_sha1("1492343027",'ą')        = 206e608ecaf23a9575ca81a86e3afd72eca243a0
hex_hmac_sha1("1492343027",'\xC4\x85') = 8b353bb4c891d73ae9be09d0653e2564e0dff243

在JS端逃脱你的Unicode ...

PHP

hash_hmac("sha1", 'ą', "1492343027");        = 8b353bb4c891d73ae9be09d0653e2564e0dff243
hash_hmac("sha1", "\xC4\x85", "1492343027"); = 8b353bb4c891d73ae9be09d0653e2564e0dff243

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM