2014-09-16 1 views
3

У меня есть некоторые проблемы с простым крипто-вызовом.SHA512 не то же самое в CryptoJS и закрытии

Я хочу сделать следующее:

  • Получение URL-закодированы и base64-закодированные значения
  • сделать URL-декодировании
  • сделать base64-декодирование
  • хэш с SHA512

При работе с CryptoJS я использую следующий код:

var parameter = "Akuwnm2318kwioasdjlnmn"; 
var urlDecoded = decodeURIComponent(parameter); 
var base64Decoded = CryptoJS.enc.Base64.parse(urlDecoded); 
var hashed = CryptoJS.SHA512(base64Decoded).toString(CryptoJS.enc.Base64); 
//hashed = "UxupkI5+dkhUorQ+K3+Tqct1WNUkj3I6N76g82CbNQ0EAH/nWjqi9CW5Qec1vq/qakNIYeXeqiAPOVAVkzf9mA=="/eWTS2lUgCEe6NJDXhNfYvXMRQDvH6k2PHVmy6LJS7RloVvcQcpVjRNVU5lJpAg==" 

При работе с закрытием, я использую следующий код:

var parameter = "Akuwnm2318kwioasdjlnmn"; 
var urlDecoded = decodeURIComponent(parameter); 
var byteArray = goog.crypt.base64.decodeStringToByteArray(urlDecoded); 
var base64Decoded = goog.crypt.byteArrayToHex(byteArray); 
var sha512 = new goog.crypt.Sha512(); 
sha512.update(base64Decoded); 
var hashed = sha512.digest(); 
hashed = goog.crypt.byteArrayToHex(hashed); 
//hashed = "bc2a878edfffb0937fbc6c0f9dbc9566edc59b74080d68d4c8bdfeb4027f17c4316a02285baaf446872d2df37b1144ac3ce18d62ab9c786b1f1fb18a53acea1d" 

Итак, почему хэши разные?

Я был бы очень рад, если бы кто-нибудь мог сказать мне, как адаптировать Closure-Code, чтобы получить тот же хеш, что и код CryptoJS.

Большое спасибо!

PS:

Я также попытался:

var parameter = "Akuwnm2318kwioasdjlnmn"; 
var urlDecoded = decodeURIComponent(parameter); 
var base64DecodedByteArray = goog.crypt.base64.decodeStringToByteArray(urlDecoded); 
var sha512 = new goog.crypt.Sha512(); 
sha512.update(base64DecodedByteArray); 
var hashed = sha512.digest(); 
hashed = goog.crypt.byteArrayToHex(hashed); 
//hashed = "531ba9908e7e764854a2b43e2b7f93a9cb7558d5248f723a37bea0f3609b350d04007fe75a3aa2f425b941e735beafea6a434861e5deaa200f3950159337fd98" 

, но затем, как вы видите, я получить другой хэш. Зачем??

+0

Обновлено, потому что я упомянул, что параметр был плохим выбором. Теперь я даже получаю три разных значения хэширования. Зачем?? – crypton00b

ответ

6

Первое значение хэш-функции идентично третьему, за исключением того, что оно кодируется base64, а не шестнадцатеричным. Вы можете изменить шестигранной кодирования и получить то же самое значение:

var hashed = CryptoJS.SHA512(base64Decoded).toString(CryptoJS.enc.Hex); 
//hashed = "531ba9908e7e764854a2b43e2b7f93a9cb7558d5248f723a37bea0f3609b350d04007fe75a3aa2f425b941e735beafea6a434861e5deaa200f3950159337fd98" 

Второй подход вы показываете имеет другое значение, потому что вы не хэширования те же данные; вы вместо этого конвертируете byteArray в шестнадцатеричную строку и затем хешируете это строковое представление, а не базовые значения.

+0

Спасибо большое чувак! Это решило мою проблему !! – crypton00b

+0

как выполнить вышеуказанное утверждение в угловом 2? –

Смежные вопросы