【问题标题】:CryptoJS cannot compare with pre-hashed dataCryptoJS 无法与预先散列的数据进行比较
【发布时间】:2015-09-27 08:53:46
【问题描述】:

我有一个包含 SHA1 散列数据的密码表。所以我想用 CryptoJS 做一个验证输入。它出错了..但是当我尝试显示它时,结果匹配..我编写了错误的函数吗?

这是我的代码

function checkCurPass()
{
    var hash = CryptoJS.SHA1("<?php echo $selected->password ?>");
    var currentPass = document.getElementById('users-profile-currentpassword');
    var hashedPass = CryptoJS.SHA1(currentPass.value);

    var message = document.getElementById('mesas');
    message.innerHTML = hashedPass;

    if (hashedPass == hash) 
    {
        $('#currentPassForm').addClass('has-success').removeClass('has-error');
    }
    else
    {
        $('#currentPassForm').addClass('has-error').removeClass('has-success');
    }
}

带有哈希“默认”的屏幕截图

【问题讨论】:

  • 你确定,在任何一个字符串的末尾都没有像换行符这样的空格吗?对不起,不好的评论。您显然是在比较从同一个哈希函数返回的两个字符串。
  • 是的..两个数据完全相同..

标签: javascript jquery hash sha1


【解决方案1】:

您的哈希不是字符串,而是对象。如果你console.log(hash),你会看到这个。为了从这些哈希中获取正确的十六进制字符串,请分别调用 hash.toString(CryptoJS.enc.Hex)hashedPass.toString(CryptoJS.enc.Hex)

当您在消息元素中显示哈希时,会隐式调用 toString,这就是显示的字符串相等的原因。

http://codepen.io/anon/pen/BNxjGm

【讨论】:

  • 我尝试将其转换为字符串。但仍然无法匹配..我必须转换两个变量吗?
  • 是的,否则您会将字符串与对象进行比较;)
猜你喜欢
  • 2015-05-14
  • 2020-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-16
  • 2015-09-16
  • 2017-10-02
  • 1970-01-01
相关资源
最近更新 更多