如何在Python中对变量进行哈希?
这个例子运行得很好,具体可以参考这个链接:
import hashlib
m = hashlib.md5()
m.update(b"Nobody inspects")
r= m.digest()
print(r)
现在,我想用一个变量来做同样的事情:var= "请对这段文字进行哈希处理"
。我该怎么做,才能按照这个例子的逻辑来呢?
3 个回答
1
我遇到了和楼主一样的问题。之前的答案对我来说都没用,但把两个答案结合起来后,我找到了这个解决办法。
我最开始是这样对一个字符串进行哈希处理的:
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
4
试试这个。希望能帮到你。
变量 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)
14
hash.update()
方法总是需要 字节 类型的数据。
首先要把 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()