Javascript SHA512在CryptoJS和闭包中不一样

Javascript SHA512在CryptoJS和闭包中不一样,javascript,google-closure-library,sha512,cryptojs,Javascript,Google Closure Library,Sha512,Cryptojs,我在一个简单的加密挑战中遇到了一些麻烦 我想做以下几点: 获取url编码和base64编码的值 进行url解码 执行base64解码 用Sha512散列 使用CryptoJS时,我使用以下代码: var parameter = "Akuwnm2318kwioasdjlnmn"; var urlDecoded = decodeURIComponent(parameter); var base64Decoded = CryptoJS.enc.Base64.parse(urlDecoded); v

我在一个简单的加密挑战中遇到了一些麻烦

我想做以下几点:

  • 获取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"
使用闭包时,我使用以下代码:

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"
那么,为什么散列不同呢

如果有人能告诉我如何调整闭包代码,以获得与CryptoJS代码相同的哈希值,我将非常高兴

非常感谢

附言:

我还尝试:

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"

但是,正如你所看到的,我得到了另一个散列。为什么???

第一个散列值与第三个散列值相同,只是它是base64编码的,而不是十六进制编码的。您可以更改为十六进制编码并获得相同的值:

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

您显示的第二种方法具有不同的值,因为您没有散列相同的数据;而是将byteArray转换为十六进制字符串,然后对该字符串表示进行散列,而不是对基础值进行散列。

更新,因为我提到了参数是一个错误的选择。现在,我甚至得到了三个不同的散列值。为什么?如何在angular 2中执行上述语句?