2015-02-13 2 views
2
var secure; 
var authentic; 
secure = prompt("Enter password",""); 
alert(secure); 

var c1 = CryptoJS.SHA256(secure); 
alert(c1); 


authentic = prompt("Enter password",""); 
alert(authentic); 
var c2=CryptoJS.SHA256(authentic); 
alert(c2); 

if(c1==c2) 
{ 
    alert("hi"); 
} 
else 
{ 
    alert("bye"); 
} 

Я использую сценарий «http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/sha256.js»Что не так в коде SHA-256 Javascript?

ОБЪЯСНЕНИЕ: Что я пытаюсь сделать, это сравнить хэшируются passwords.If оба вошли пароли (безопасный и достоверный), которые были хэшируются (c1 и с2 соответственно) равны, Он должен отображать «привет» мне. Но я нахожу, что он всегда «до свидания» ко мне.

ПРОБЛЕМА: Когда я сравниваю c1 и c2, результат, который я всегда получаю, является «bye», хотя значения c1 и c2 одинаковы, когда я показываю их с помощью окна предупреждения.

Я новичок в хэшировании. Помощь будет очень оценена!

+0

Вы делаете плохое сравнение, вам нужно «постоянная времени» сравнивает строку для предотвращения атак синхронизации –

+0

@RichieFrame Затрудняюсь сказать, так как все это не имеет никакого смысла. Unsalted SHA-2, сравнение с клиентом, я даже не знаю, с чего начать ... – CodesInChaos

+0

Используйте правильный отступ. – CodesInChaos

ответ

2

От the docs:

Хэш вы получите обратно не строка еще. Это объект WordArray. Когда вы используете объект WordArray в контексте строки, он автоматически преобразуется в шестнадцатеричную строку.

Если сравнить объекты в JavaScript вы проверяете, чтобы увидеть, если они являются объектом же, нет, если они одинаковые объекты.

Поскольку вы создали два WordArrays, вы сравниваете два разных (но, возможно, одинаковых) объекта.

Вам необходимо преобразовать их в строки.

if ((''+c1) == (''+c2)) 

или

if (c1.toString() == c2.toString()) 
+0

Удивительный! Большое спасибо! Мне жаль, что я не могу повышать вознаграждение. У меня меньше репутации. –

+0

Я поддержал, репутация достигла 15 :) –