java - CryptoJS.SHA1 与 MessageDigest.getInstance ("SHA-1").digest()

标签 java javascript cryptojs

我正在尝试在我的 javascript 代码中应用 SHA1 加密,就像 java 的工作方式一样, 结果如下: java:

String str = "123456";
MessageDigest sha = MessageDigest.getInstance("SHA-1");
byte[] hash = sha.digest(str.getBytes());
for(int i =0 ; i<hash.length;i++){
   System.out.print((new Byte(hash[i]))+" ");
}

java 的输出:

124 74 -115 9 -54 55 98 -81 97 -27 -107 32 -108 61 -62 100 -108 -8 -108 27

JavaScript:

var key = "123456";
console.warn(CryptoJS.SHA1(key.getBytes().toString()).toString().getBytes());

javascript 的输出:

[54, 49, 52, 49, 51, 100, 55, 99, 53, 49, 50, 102, 100, 99, 98, 48, 98, 53, 53, 55, 57, 98, 55, 53, 56, 55, 50, 54, 53, 102, 55, 53, 99, 99, 98, 51, 53, 50, 52, 52]

如何让 JavaScript 完全按照 Java 的方式工作?所以它也必须产生一个数组。

String.prototype.getBytes = function () {
    var bytes = [];
    for (var i = 0; i < this.length; i++){
        bytes.push(this.charCodeAt(i));
    }
    return bytes;
};

最佳答案

我不知道 key.getBytes() 应该是什么。您应该简单地将字符串传递给 SHA1 函数并从中获取您选择的表示形式。这会从 Java 代码中生成字节数组的匹配十六进制表示形式。

> var key = "123456";
> CryptoJS.SHA1(key).toString()
"7c4a8d09ca3762af61e59520943dc26494f8941b"

如果您想创建完全相同的数组,您可以迭代 CryptoJS 原生表示的 words 属性。每个整数以 Big-Endian 表示法表示 4 个字节。

var key = "123456";
var hash = CryptoJS.SHA1(key);
var byteArray = [];
hash.words.forEach(function(i){ 
  var k;
  for(var j = 3; j >= 0; j--){
    k = (i >> (j*8)) & 0xFF;
    k = k < 128 ? k : -(256 - k);
    byteArray.push(k);
  }
});

关于java - CryptoJS.SHA1 与 MessageDigest.getInstance ("SHA-1").digest(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28148869/

相关文章:

java - 将视频或音频转换为文本而不播放?

java - 在 jsp 和 servlet 中设置参数

javascript - 我是否通过替换对象中的整个数组来改变我的 reducer 状态?

javascript - react 路由器 v3 : how to reload page when entering and leaving a specific route

node.js - 如何使用 cryptoJS 或 Node 的默认加密为 AES 选择密码?

java - 如何使用 url 作为 StringReader 的 InputSource

javascript - PHP 如何在用户提交表单时更新文本

JavaScript 中的 PHP 函数 crypt()

node.js - 文件 createWriteStream 中的 NodeError [ERR_STREAM_WRITE_AFTER_END] : write after end,

java - JSP上显示的内容