10

这个例子很好用:

import hashlib
m = hashlib.md5()
m.update(b"Nobody inspects")
r= m.digest()
print(r)

现在,我想做同样的事情,但有一个变量:var= "hash me this text, please"。我怎么能按照示例的相同逻辑来做呢?

4

3 回答 3

12

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()
于 2014-07-23T08:20:27.803 回答
3

试试这个。希望能帮助到你。变量 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)
于 2019-03-19T17:41:21.650 回答
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

于 2019-05-17T11:14:38.077 回答