这个例子很好用:
import hashlib
m = hashlib.md5()
m.update(b"Nobody inspects")
r= m.digest()
print(r)
现在,我想做同样的事情,但有一个变量:var= "hash me this text, please"
。我怎么能按照示例的相同逻辑来做呢?
这个例子很好用:
import hashlib
m = hashlib.md5()
m.update(b"Nobody inspects")
r= m.digest()
print(r)
现在,我想做同样的事情,但有一个变量:var= "hash me this text, please"
。我怎么能按照示例的相同逻辑来做呢?
该hash.update()
方法总是需要bytes。
首先将 unicode 文本编码为字节;您编码的内容是应用程序的决定,但如果您想做的只是指纹文本,那么 UTF-8 是一个不错的选择:
m.update(var.encode('utf8'))
然而,当你不这样做时你得到的例外很清楚:
>>> import hashlib
>>> hashlib.md5().update('foo')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Unicode-objects must be encoded before hashing
如果您要获取文件的哈希值,请改为以二进制模式打开文件:
from functools import partial
hash = hashlib.md5()
with open(filename, 'rb') as binfile:
for chunk in iter(binfile, partial(binfile.read, 2048)):
hash.update(chunk)
print hash.hexdigest()
试试这个。希望能帮助到你。变量 var 必须是 utf-8 编码的。如果您输入一个字符串,即“Donald Duck”,var 变量将为 b'Donald Duck'。然后,您可以使用 hexdigest() 散列字符串
#!/usr/bin/python3
import hashlib
var = input('Input string: ').encode('utf-8')
hashed_var = hashlib.md5(var).hexdigest()
print(hashed_var)
我和OP有同样的问题。出于某种原因,我无法让之前的任何一个答案为我工作,但两者的结合有助于得出这个解决方案。
我最初是在散列这样的字符串;
str = hashlib.sha256(b'hash this text')
text_hashed = str.hexdigest()
print(text_hashed)
结果;d3dba6081b7f171ec5fa4687182b269c0b46e77a78611ad268182d8a8c245b40
我散列变量的解决方案;
text = 'hash this text'
str = hashlib.sha256(text.encode('utf-8'))
text_hashed = str.hexdigest()
print(text_hashed)
结果;d3dba6081b7f171ec5fa4687182b269c0b46e77a78611ad268182d8a8c245b40