JavaScript MD5 与 Python/Bash md5sum 不同

标签 javascript python md5 md5sum

我有以下代码片段

    function runUpload( file ) {
        key_name = file.name
        if( file.type === 'image/png'  || 
                file.type === 'image/jpg'  || 
            file.type === 'image/jpeg' ||
                file.type === 'image/gif'  ||
                file.type === 'image/bmp'  ){
            var reader = new FileReader(),
                    image = new Image();
            reader.readAsDataURL( file );
            reader.onload = function( _file ){
                keyhash = md5(atob(_file.target.result.split(',')[1]));
                ZZ('key').el.src = _file.target.result;
                ZZ('key').el.style.display = 'block';
            } 
        } 
    }

发生分割的原因是因为如果我将其保留为:

_file.target.result

结果字符串将是:

data:text/plain;base64,SEVMTE8=

它使用 https://raw.githubusercontent.com/blueimp/JavaScript-MD5/master/js/md5.min.js

keyhash的值和我做的时候不一样:

cat file.png | md5sum

此外,在执行下面的 python 时,它为我提供了与 JS 版本不同的值,但与 Linux 相同

import hashlib

def md5Checksum(filePath):
    with open(filePath, 'rb') as fh:
        m = hashlib.md5()
        while True:
            data = fh.read(8192)
            if not data:
                break
            m.update(data)
        return m.hexdigest()

print('The MD5 checksum of text.txt is', md5Checksum('000000.png'))

我是否遗漏了一些明显的东西,或者它们都应该返回相同的值?

JS:dc839221df178f70c08fa510a3d76a3b
Python 和 MD5SUM:9310dad66d4a73e29a761fb724f2825

事实上,如果我有一个名为 HELLO.txt 的文件,其中唯一的内容是:HELLO

在 Linux/Python 中对其进行 base64 处理会得到相同的结果,但与 JS 执行的结果不同。

SEVMTE8K vs SEVMTE8=

我认为这可能与换行、中断点赞、回车等有关

JavaScript 将其视为一个连续流,而在文本编辑器中编辑文件会显示换行符

谢谢

最佳答案

唯一的解释是编码不同。找出 JS (ISO-8859-1) 中的编码与 python (UTF-8) 中的编码。

关于JavaScript MD5 与 Python/Bash md5sum 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59306538/

相关文章:

javascript - 在 Chrome 控制台中使用从 Chrome 扩展加载的 jQuery

javascript - 在 jQuery 实时预览 div 中将文本转换为图像

python - 赋值前引用的变量

Java MD5 哈希与 .NET 哈希不匹配

javascript - 如何使用JSONP?

javascript - 从 HTML 表格中删除行后如何存储单元格的值?

python - 发现未记录程序的 IPC 接口(interface)?

python - 在 Pandas 数据框中替换大于 1 的值

c# - 计算 MD5 值对于不同的字符串返回 "0001..0E0F"

python - 生成文件的 MD5 校验和