2015-07-09 1 views
1

У меня есть таблица паролей, которая содержит данные хэширования SHA1. поэтому я хочу сделать валидацию с помощью CryptoJS. это пошло на ошибку. Но когда я пытаюсь отобразить его, результат совпадет. Я код неправильной функции?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'); 
    } 
} 

скриншот с HASHED 'по умолчанию'

enter image description here

+0

Вы уверены, нет, как пробелы переносами в конце каждой строки? Извините, плохой комментарий. Вы, очевидно, сравниваете две строки, возвращенные из одной и той же хэш-функции. –

+0

да .. оба данные точно одинаковые .. –

ответ

2

Ваши хэши еще нет строки, но объекты. Если вы console.log(hash), вы увидите это. Чтобы получить правильную шестнадцатеричную строку из этих хэшей, вызовите hash.toString(CryptoJS.enc.Hex) и hashedPass.toString(CryptoJS.enc.Hex) соответственно.

Когда вы показываете свой хэш в элементе сообщения, toString называется неявно, поэтому отображаемые строки были равны.

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

+0

я попытался преобразовать его в строку. но все еще не подходит. Мне нужно преобразовать обе переменные? –

+0

да, в противном случае вы бы сравнивали строку с объектом;) –

+0

работает! Спасибо приятель.. –