Javascript 具有相同输入值的不同哈希

Javascript 具有相同输入值的不同哈希,javascript,hash,cryptojs,Javascript,Hash,Cryptojs,我正在构建一个api,但在客户端接口中使用CryptoJs生成哈希时遇到了问题 My js函数执行以下操作: console.log(" username: '" + $rootScope.username + "'"); console.log("timestamp: '" + timestamp + "'"); console.log(" request: '" + req + "'"); console.log(" entropy: '" + "dragonsahead" + "'

我正在构建一个api,但在客户端接口中使用CryptoJs生成哈希时遇到了问题

My js函数执行以下操作:

console.log(" username: '" + $rootScope.username + "'");
console.log("timestamp: '" + timestamp + "'");  
console.log("  request: '" + req + "'");
console.log("  entropy: '" + "dragonsahead" + "'");
console.log(" password: '" + $rootScope.password + "'");
var message = $rootScope.username+timestamp+req+"dragonsahead";
console.log("  message: '" + message +"'");
var hash = CryptoJS.HmacSHA1(message, $rootScope.password).toString();
console.log("     HASH: '" + hash + "'");
return hash;
$rootScope.username
$rootScope.password
是用户输入

JS日志:

 username: 'admin' 
timestamp: '1394643128.478' 
  request: '/login' 
  entropy: 'dragonsahead' 
 password: 'e1a47a0407d876c8187b1e984a6813abde8160af' 
  message: 'admin1394643128.478/logindragonsahead' 
     HASH: '5061875265279c7378c95c9536feade1c610492d' 
我可以在服务器端日志中看到哈希不匹配。 PHP服务器日志:

2014-03-12 16:52:08 - INFO -->  username: 'admin' 
2014-03-12 16:52:08 - INFO --> timestamp: '1394643128.478' 
2014-03-12 16:52:08 - INFO -->   request: '/login' 
2014-03-12 16:52:08 - INFO -->   entropy: 'dragonsahead' 
2014-03-12 16:52:08 - INFO -->  password: 'e1a47a0407d876c8187b1e984a6813abde8160af' 
2014-03-12 16:52:08 - INFO -->   message: 'admin1394643128.478/logindragonsahead' 
2014-03-12 16:52:08 - INFO -->      HASH: '4c34a29aa05059d5016bd74796407de3d2e5428c' 
2014-03-12 16:52:08 - INFO -->CLIENTOKEN: '5061875265279c7378c95c9536feade1c610492d'
在此之后,我检查了I,发现服务器构建的哈希是正确的。 因此,我决定将CryptoJS加载到一个空白页面(例如谷歌),看看会发生什么:

> var jq = document.createElement('script');
> jq.src = "https://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/hmac-sha1.js";
> document.getElementsByTagName('head')[0].appendChild(jq);
<script src=​"https:​/​/​crypto-js.googlecode.com/​svn/​tags/​3.1.2/​build/​rollups/​hmac-sha1.js">​</script>​
>var test = CryptoJS.HmacSHA1("admin1394643128.478/logindragonsahead",'e1a47a0407d876c8187b1e984a6813abde8160af')
undefined
>test.toString()
"4c34a29aa05059d5016bd74796407de3d2e5428c"
var jq=document.createElement('script'); >jq.src=”https://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/hmac-sha1.js"; >document.getElementsByTagName('head')[0].appendChild(jq); ​​ >var test=CryptoJS.HmacSHA1(“admin1394643128.478/logindragonsahead”,'e1a47a0407d876c8187b1e984a6813abde8160af') 未定义 >test.toString() “4C34A29AA0559D5016BD74796407DE3D2E5428C”
由于CryptoJS返回了正确的散列,这只能说明我搞乱了javascript变量。我不知道什么可能会弄乱我的变量…

碰巧我在angularjs的“$rootScope”中存储密码

我需要执行
$rootScope.password.tostring()
而不是
$rootScope.password

解决了