我正在尝试使用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));