Sha*_*hab 20 python hash encoding python-3.x
我是编码的新手,并且在尝试编码字符串时遇到了问题.
>>> import hashlib
>>> a = hashlib.md5()
>>> a.update('hi')
Traceback (most recent call last):
File "<pyshell#22>", line 1, in <module>
a.update('hi')
TypeError: Unicode-objects must be encoded before hashing
>>> a.digest()
b'\xd4\x1d\x8c\xd9\x8f\x00\xb2\x04\xe9\x80\t\x98\xec\xf8B~'
Run Code Online (Sandbox Code Playgroud)
(a)现在被认为是编码的吗?
第二个问题:当我在脚本中运行上面相同的代码时,我收到此错误:
import hashlib
a = hashlib.md5()
a.update('hi')
a.digest()
Run Code Online (Sandbox Code Playgroud)
回溯(最近一次调用最后一次):文件"C:/ Users/User/Desktop/Logger/Encoding practice.py",第3行,a.update('hi')TypeError:必须在散列之前对Unicode对象进行编码
为什么代码在shell中工作而不是脚本?我正在使用Windows和Python 3.4
谢谢.
Ste*_*nes 19
由于您编写简单的字符串,我推断您运行的是Python 3,其中所有字符串都是unicode对象,您有两种选择:
"Nobody inspects".encode('utf-8')使用手册中显示的二进制字符串:
m.update(b"Nobody inspects")
m.update(b" the spammish repetition")
Run Code Online (Sandbox Code Playgroud)脚本与shell的行为不同的原因是脚本在错误上停止,而在shell中,最后一行是单独的命令,但由于先前的错误,仍然没有按照您的意愿执行操作.
它在 REPL 中不起作用。它没有进行任何哈希处理,因为您没有向它传递任何有效的哈希值。首先尝试编码。
3>> hashlib.md5().digest()
b'\xd4\x1d\x8c\xd9\x8f\x00\xb2\x04\xe9\x80\t\x98\xec\xf8B~'
3>> a = hashlib.md5()
3>> a.update('hi'.encode('utf-8'))
3>> a.digest()
b'I\xf6\x8a\\\x84\x93\xec,\x0b\xf4\x89\x82\x1c!\xfc;'
Run Code Online (Sandbox Code Playgroud)