使用Blob API以块的形式上传文件.在这里,我想检查blob的md5校验和.当我尝试下面的代码时,它对文本文件工作正常,但它为二进制文件返回不同的值.
var reader = new FileReader(); reader.readAsBinaryString(blob); reader.onloadend = function () { var mdsum = CryptoJS.MD5(reader.result); console.log("MD5 Checksum",mdsum.toString()); };
如何为所有类型的文件正确计算blob的md5校验和?
使用以下代码创建正确的md5哈希:
function calculateMd5(blob, callback) { var reader = new FileReader(); reader.readAsArrayBuffer(blob); reader.onloadend = function () { var wordArray = CryptoJS.lib.WordArray.create(reader.result), hash = CryptoJS.MD5(wordArray).toString(); // or CryptoJS.SHA256(wordArray).toString(); for SHA-2 console.log("MD5 Checksum", hash); callback(hash); }; }
更新(更简单):
function calculateMd5(blob, callback) { var reader = new FileReader(); reader.readAsBinaryString(blob); reader.onloadend = function () { var hash = CryptoJS.MD5(reader.result).toString(); // or CryptoJS.SHA256(reader.result).toString(); for SHA-2 console.log("MD5 Checksum", hash); callback(hash); }; }
一定要包括core.js
,lib-typedarrays.js
(重要),并md5.js
从CryptoJS库组件.
请查看此小提琴以获取完整示例(因为原始访问控制它不适用于小提琴,请在本地服务器上尝试).