我有以下代码段
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将其作为一个连续流,而在文本编辑器中编辑文件会显示换行符
谢谢
我具有以下代码段功能runUpload(file){key_name = file.name if(file.type ==='image / png'|| file.type ==='image / jpg'|| file ... 。
唯一的解释是编码是不同的。找出JS(ISO-8859-1)中的编码与python(UTF-8)中的编码。