当使用 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/