为什么哈希的输出看起来像 \x88H\x98\xda(\x04qQ vs * r?



我是加密和一般编程的新手。我只是想让我的头脑围绕一些基本概念。

我正在使用python,Crypto.Hash.SHA256

from Crypto.Hash import SHA256

在 REPL 中,如果我键入

print SHA256.new('password').digest()//j���*�rBo��)'s`=

SHA256.new('password').digest()//"^x88Hx98xda(x04qQxd0xe5ox8dxc6)'s`=rjxabxbdxd6*x11xefrx1dx15Bxd8"

这两个输出是什么? 应该如何解释它们?

在第一种情况下,您使用的是 print,因此 Python 正在尝试将字节转换为可打印字符。不幸的是,并非每个字节都是可打印的,因此您会得到一些奇怪的输出。

在第二种情况下,由于您没有调用 print,Python 解释器会执行一些不同操作。它采用返回值(在本例中为字符串(,并显示字符串的内部表示形式。这就是为什么对于某些字符,您会得到可打印的内容,但在其他情况下,您会得到一个转义序列,例如x88.

这两个输出恰好只是同一摘要的两个表示形式。

仅供参考,在使用 pycrypto 并查看哈希函数输出时,我强烈建议使用hexdigest而不是digest

最新更新