簡體   English   中英

CryptoJS.SHA1與MessageDigest.getInstance(“ SHA-1”)。digest()

[英]CryptoJS.SHA1 vs MessageDigest.getInstance(“SHA-1”).digest()

我試圖在我的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);
  }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM