javascript - 通过 Crypto.js 获取文件的 md5sum

标签 javascript linux md5 fileapi cryptojs

当使用 md5sum linux 命令和 CryptoJS 的 MD5 方法时,我试图让 tar 文件的 md5sum 产生相同的值。

我在 JavaScript 中这样做(在将文件放入 HTML 表单之后):

var reader = new FileReader();

reader.onloadend = function () {
     text = (reader.result);
}

reader.readAsBinaryString(document.getElementById("firmware_firmware").files[0]);

var hash = CryptoJS.MD5(text);

hash.toString();

在 Linux 中我这样做:

md5sum name_of_file.tar

目前这两个产生不同的结果。我如何才能让 JavaScript 以与 Linux 上的 md5sum 相同的方式对 tar 文件的内容进行 MD5ed?

对于一个简单的字符串,md5sum 和 CryptoJS 产生相同的值。

编辑:使用名为 Fred.txt 的文件,内容为“Fred”,md5sum 和 CryptoJS 都产生相同的值:c624decb46fa3d60e824389311b252f6。

在 update.tar 文件中,linux 上的 md5sum 给我:1f046eedb7d8279953d233e590830e4f,在 CryptoJS 上它给我:f0c3730e5a9863cffa0ba3fadd531788

Edit2:进一步测试表明,这实际上是一个问题,因为文件很大,例如 7 兆字节

最佳答案

JavaScript 中的所有字符串——甚至“二进制字符串”——实际上都是 UTF-16 字符。 “二进制字符串”是选择仅使用前 256 个代码点的字符串。由于 Latin-1 编码也恰好使用前 256 个代码点,因此您可以使用 Latin-1 将字符串转换为字节。

var hash = CryptoJS.MD5(CryptoJS.enc.Latin1.parse(text));

关于javascript - 通过 Crypto.js 获取文件的 md5sum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20263741/

相关文章:

javascript - UI Router 1.0 状态更改事件不起作用

javascript - 购物 list /如何重新添加已删除的项目/javascript

javascript - 默认水平滚动的表格

Java 文件 MD5 和 PHP md5_file 不同

java - 如何让oracle db支持md5加密?

javascript - 使用 Normalizr 后排序

php - 如何使用 PHP 检查 cronjob 是否存在?

linux - 在 ubuntu 16.04 上安装 mongodb 时出错

linux - 在 Assembly 中使用移位进行乘法运算。但是得到的数字太高了!我哪里错了?

mysql - 在 mysql 中有效存储 md5 哈希的最佳实践