【问题标题】:Client-Side calculated MD5 hash using CryptoJS is differnt to terminal calculation客户端使用 CryptoJS 计算的 MD5 哈希与终端计算不同
【发布时间】:2019-06-13 12:33:52
【问题描述】:

我已将文件上传集成到我的网络应用程序中。文件不应上传,但应在客户端计算文件的 MD5 哈希,然后仅将这个哈希发送到服务器。

Javascript 部分:

if (input.files && input.files[0]) {
    let reader = new FileReader();
    reader.onload = (e) => {
       let data = e.target.result;      
       var hashed = CryptoJS.MD5(data);
       console.log('hashed: ' + hashed);
    }
    reader.readAsDataURL(input.files[0]);
}

但是,上面的代码给了我与终端不同的哈希值 (md5sum )。终端给了我与各种在线转换器相同的哈希值。

我试过的 SHA1 和 SHA256 算法是一样的。

示例: 来自维基百科的This image 给出了以下哈希值。

终端:e5d23cb99614778b2acb163b8ee90810

CryptoJS:468641711626fcfe6d956ddb21ccd4c7

【问题讨论】:

    标签: javascript hash cryptojs


    【解决方案1】:

    readAsDataURL() 将返回一个 base64 字符串(带有数据 URI 前导码),这就是您的哈希值,但是 MD5 终端工具只会读取原始字节并按原样进行哈希处理。

    修复使用:

    reader.readAsArrayBuffer(input.files[0]);
    

    获取原始字节并且:

    var hashed = CryptoJS.MD5(CryptoJS.lib.WordArray.create(data));
    

    以它可以处理的格式将它们传递给 CryptoJs。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-14
      • 1970-01-01
      • 1970-01-01
      • 2021-03-30
      • 2011-12-08
      • 2021-06-06
      • 2022-09-23
      • 1970-01-01
      相关资源
      最近更新 更多