首页 文章

如何使用CryptoJS计算blob的md5校验和

提问于
浏览
5

使用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校验和?

1 回答

  • 8

    使用以下代码创建正确的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);
        };
      }
    

    Update (a bit simpler):

    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);
        };
      }
    

    请务必在CryptoJS库中包含 core.jslib-typedarrays.jsimportant )和 md5.js 组件 .
    请参阅此fiddle以获取完整示例(由于原始访问控制,它不适用于小提琴,请在本地服务器上尝试) .

相关问题