繁体   English   中英

通过Crypto.js获取文件的md5sum

[英]Getting md5sum of a file through Crypto.js

我正在尝试使用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来获取MD文件的内容,就像md5sum在Linux上一样?

对于简单的String,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));

我认为这是因为文件没有完成加载,并且在文件上传为100%之前创建了哈希。 尝试将散列移动到onloadend事件中:

var reader = new FileReader();

reader.onloadend = function () {
     var hash = CryptoJS.MD5(reader.result);
     hash.toString();
}

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

当您运行bash时,请确保您没有向散列函数发送换行符。 如果使用echo ,请添加-n参数:

$ echo -n abc | md5sum
900150983cd24fb0d6963f7d28e17f72  -

VS:

$ echo abc | md5sum
0bee89b07a248e27c83fc3d5951213c1  -

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM