簡體   English   中英

通過Crypto.js獲取文件的md5sum

[英]Getting md5sum of a file through Crypto.js

我正在嘗試使用md5sum linux命令和CryptoJS的MD5方法獲取tar文件的md5sum以生成相同的值。

我在JavaScript中(在將文件放入HTML表單后):

var reader = new FileReader();

reader.onloadend = function () {
     text = (reader.result);
}

reader.readAsBinaryString(document.getElementById("firmware_firmware").files[0]);

var hash = CryptoJS.MD5(text);

hash.toString();

在Linux中我做:

md5sum name_of_file.tar

目前這兩個產生不同的結果。 我怎樣才能獲得JavaScript來獲取MD文件的內容,就像md5sum在Linux上一樣?

對於簡單的String,md5sum和CryptoJS產生相同的值。

編輯:使用名為Fred.txt的文件,內容為“Fred”,md5sum和CryptoJS都生成相同的值:c624decb46fa3d60e824389311b252f6。

在update.tar文件中,linux上的md5sum給了我:1f046eedb7d8279953d233e590830e4f,在CryptoJS上它給了我:f0c3730e5a9863cffa0ba3fadd531788

Edit2:進一步的測試表明,由於文件大小很大,例如7兆字節,這實際上是一個問題

JavaScript中的所有字符串 - 甚至是“二進制字符串” - 實際上都是UTF-16字符。 “二進制字符串”是選擇僅使用前256個代碼點的字符串。 由於Latin-1編碼也使用前256個代碼點,因此可以使用Latin-1將字符串轉換為字節。

var hash = CryptoJS.MD5(CryptoJS.enc.Latin1.parse(text));

我認為這是因為文件沒有完成加載,並且在文件上傳為100%之前創建了哈希。 嘗試將散列移動到onloadend事件中:

var reader = new FileReader();

reader.onloadend = function () {
     var hash = CryptoJS.MD5(reader.result);
     hash.toString();
}

reader.readAsBinaryString(document.getElementById("firmware_firmware").files[0]);

當您運行bash時,請確保您沒有向散列函數發送換行符。 如果使用echo ,請添加-n參數:

$ echo -n abc | md5sum
900150983cd24fb0d6963f7d28e17f72  -

VS:

$ echo abc | md5sum
0bee89b07a248e27c83fc3d5951213c1  -

暫無
暫無

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

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