此示例工作正常example:
import hashlib
m = hashlib.md5()
m.update(b"Nobody inspects")
r= m.digest()
print(r)
现在,我想用变量做同样的事情:var= "hash me this text, please"
。我怎么能按照例子中的相同逻辑来做呢?
答案 0 :(得分:6)
hash.update()
method始终需要字节。
首先将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()
答案 1 :(得分:1)
尝试一下。希望能帮助到你。 变量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)
答案 2 :(得分:0)
我遇到了与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