客户端使用 Crypto JS 计算的 MD5 哈希与终端计算不同
Client-Side calculated MD5 hash using CryptoJS is differnt to terminal calculation
我已将文件上传集成到我的网络应用程序中。不应上传文件,但应在客户端计算文件的 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
readAsDataURL()
将 return 一个 base64 字符串(带有数据 URI 前导码)所以这就是您的散列,但是 MD5 终端工具将读取原始字节并对它们进行散列 as-is。
修复使用:
reader.readAsArrayBuffer(input.files[0]);
获取原始字节并:
var hashed = CryptoJS.MD5(CryptoJS.lib.WordArray.create(data));
以它可以处理的格式将它们传递给 CryptoJs。
我已将文件上传集成到我的网络应用程序中。不应上传文件,但应在客户端计算文件的 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
readAsDataURL()
将 return 一个 base64 字符串(带有数据 URI 前导码)所以这就是您的散列,但是 MD5 终端工具将读取原始字节并对它们进行散列 as-is。
修复使用:
reader.readAsArrayBuffer(input.files[0]);
获取原始字节并:
var hashed = CryptoJS.MD5(CryptoJS.lib.WordArray.create(data));
以它可以处理的格式将它们传递给 CryptoJs。