Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript和PHP的不同哈希值_Php_Javascript_Variables_Hash_Character Encoding - Fatal编程技术网

Javascript和PHP的不同哈希值

Javascript和PHP的不同哈希值,php,javascript,variables,hash,character-encoding,Php,Javascript,Variables,Hash,Character Encoding,我在javasript和PHP中都使用HMAC,当我运行两个PORGAM时,将两个函数的参数作为变量,得到两个不同的HMAC值。但是,如果我将它们作为字符串文本运行,那么一切都会正常进行。我认为这与每种语言中字符串变量的编码方式有关,但我不知道如何修复它。下面是我正在使用的代码 在下面的php函数中,从命令行检索$pwd1 $k=hash_hmac('sha1',$pwd1,$salt) 在下面的javascript函数中,password来自json.parse(msg)语句。然后我使用下面的

我在javasript和PHP中都使用HMAC,当我运行两个PORGAM时,将两个函数的参数作为变量,得到两个不同的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,密码,salt)


谢谢。

我找到了答案。PHP和Javascript存储字符串的方式不同。当PHP从命令行运行时,就像我刚才所做的那样,它存储字符串和回车符(用于输入变量),使字符串比不存储回车符的Javascript长一个字符。因此,如果您想比较Javascript字符串和PHP字符串,或者对它们进行散列,则必须从PHP变量中选取一个子字符串,从0到-1(-1是长度-1),以说明PHP回车。

我找到了答案。PHP和Javascript存储字符串的方式不同。当PHP从命令行运行时,就像我刚才所做的那样,它存储字符串和回车符(用于输入变量),使字符串比不存储回车符的Javascript长一个字符。因此,如果您想以任何方式比较Javascript字符串和PHP字符串或对它们进行散列,则必须从PHP变量中选取一个子字符串,从0到-1(-1为长度-1)来计算PHP回车。

您是否尝试将
json.parse(msg)
的输出记录到控制台?(如果您在浏览器中,这不应该是
JSON.parse(msg)
?)您是否尝试将
JSON.parse(msg)
的输出记录到控制台?(如果您在浏览器中,这不应该是
JSON.parse(msg)
?)不应该有换行符,除非您正在执行类似
echo foo | php myscript.php
。。。在这种情况下,您可以将
-n
开关与
echo
一起使用,因为我正在从命令行运行php脚本,所以当我输入信息时,读取信息的部分也会读取回车符。当我编写php脚本存储的内容时,它存储了我打印的信息和回车符,除非您执行类似于
echo foo | php myscript.php
的操作,否则不应该有换行符。。。在这种情况下,您可以将
-n
开关与
echo
一起使用,因为我正在从命令行运行php脚本,所以当我输入信息时,读取信息的部分也会读取回车符。当我编写php脚本存储的内容时,它存储了我打印的信息和回车