我在javasript和PHP中使用HMAC,当我运行两个porgams并将两个函数的参数作为变量时,我得到了两个不同的HMAC值。 但是,如果我将它们作为字符串文字运行,那么一切正常。 我认为这与每种语言中的字符串变量编码方式有关,但我不知道如何解决它。 我正在使用的代码如下。
在下面的 php 函数中,$pwd1
是从命令行检索的。
$k = hash_hmac('sha1', $pwd1, $salt);
在下面的javascript函数中,password
是从json.parse(msg)
语句中获取的。 然后我使用以下 HMAC 方法来自
<script type="text/javascript" src="http://crypto-js.googlecode.com/files/2.5.3-crypto-sha1-hmac.js"></script>
看起来像Crypto.HMAC(Crypto.SHA1,password,salt);
.
谢谢。
我找到了答案。 PHP 和 Javascript 存储字符串的方式是有区别的。 当 PHP 从命令行运行时,就像我所做的那样,它存储字符串和回车符(用于输入变量),使字符串比不存储回车符的 Javascript 长一个字符。 因此,如果你想比较Javascript字符串和PHP字符串或散列它们,你必须从PHP变量中获取一个子字符串,从0到-1(-1是长度-1)来考虑PHP回车。