簡體   English   中英

更正javascript中所有文件類型的MD5哈希

[英]Correct MD5 hash in javascript for all filetypes

在這里使用庫: https : //github.com/blueimp/JavaScript-MD5我正在嘗試使用javascript正確哈希MD5中的文件。

到目前為止,我得到了文本文件的正確哈希,但是如果我嘗試對圖像文件進行哈希,則會得到不正確的哈希。

這可能是由於javascript FileReader如何讀取較大的圖像文件。 我已經嘗試過readAsBinaryString(),readAsArrayBuffer()和readAsText(),但是它們都不提供給定庫的正確哈希值。

我應該如何為此讀取文件以為所有文件類型提供正確的哈希,是否有更合適的庫適用於我應該使用的所有文件類型?

HTML:

<input id="file-to-hash" type=file>
<button onclick="hashFile()">Hash</button>

使用Javascript:

function hashFile() {

 var file = document.getElementById('file-to-hash').files[0];

 var reader = new FileReader();
 reader.readAsArrayBuffer(file);
 reader.onload = readSuccess;
}

function readSuccess(evt){
 fileContents = evt.target.result;
 var hash = md5(fileContents);
}

現在有SubtleCrypto API及其subtle.digest方法。

您將無法從此API獲取MD5哈希,因為MD5 不再被認為是安全的

但是您將能夠使用其他(更安全)的算法(例如SHA)獲得哈希值。

 function getHash(buffer, algo = "SHA-256") { return crypto.subtle.digest(algo, buffer) .then(hash => { // here hash is an arrayBuffer, so we'll convert it to its hex version let result = ''; const view = new DataView(hash); for (let i = 0; i < hash.byteLength; i += 4) { result += ('00000000' + view.getUint32(i).toString(16)).slice(-8); } return result; }); } f.onchange = e => { const fR = new FileReader(); fR.onload = e => getHash(fR.result) .then(hash => console.log(hash)) // Chrome only accept it from an secure origin .catch(e => { if (e.code === 9) { console.log(`Be sure to be on the https page : https://stackoverflow.com/questions/44036218/`) } else { console.log(e.message) } }) fR.readAsArrayBuffer(f.files[0]); } 
 <input type="file" id="f"> 

暫無
暫無

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

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