javascript - 具有相同输入值的不同哈希值

标签 javascript hash cryptojs

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

我的 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'

此后我检查了我 this site服务器构建的哈希值是正确的。 因此,我决定将 CryptoJS 加载到空白页面(例如 Google),看看会发生什么:

> 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"

由于 CryptoJS 返回了正确的哈希值,这只能是我搞乱了我的 javascript 变量。我不知道什么可能会扰乱我的变量......

最佳答案

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

我需要做 $rootScope.password.tostring() 而不是 $rootScope.password;

已解决。

关于javascript - 具有相同输入值的不同哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22358981/

相关文章:

php - 菜单栏通知徽章更新问题

javascript - 监听先前选择的输入的变化

c++ - 在 C++ 中从 unsigned long long 到 unsigned int 的转换

c# - 如何获取 user.config 路径中​​的哈希值?

javascript - SHA256 未定义

javascript - 我可以在 Chrome 扩展程序中包含 CryptoJS 文件吗?

javascript - 为什么jQuery或诸如getElementById之类的DOM方法找不到元素?

javascript - JS中字符串中 '='后面的解析和提取

security - 散列以创建唯一的 URL,因此很难猜测有效的 URL 来代替身份验证

node.js - Electron 4+ 中加密模块的 createECDH 不支持 secp256k1