在Python中,使用尽可能少的字符表示SHA-256哈希

时间:2018-01-03 16:50:30

标签: python hash sha

我可以存储完整SHA-256哈希的最密集方式(最少字符)是什么?

2 个答案:

答案 0 :(得分:3)

.digest()对象上调用hashlib.sha256将返回一个32字节的字符串 - 最短的方式(以8位字节作为相关单元)来存储256位数据,这是有效的随机用于压缩性目的。

由于8 * 32 == 256,这可以证明没有浪费 - 每一位都被使用。

答案 1 :(得分:2)

查尔斯'答案绝对正确。但是,我假设您不想使用SHA256 bash的最短二进制编码 - 32个八位字节的字符串 - 并且想要一些可打印且有些人类可读的东西。

注意:但是,此完全适用于条形码。至少QR码编码二进制数据,因此只需使用哈希的digest()方法 - 这将是您可以在那里使用的最有效的编码。您的QR代码生成库应该最有可能支持生成" raw"二进制字符串 - 检查您的库文档并找到正确的方法/调用。

SHA哈希(和其他哈希)不会生成或操作字符,它们使用二进制数据。 SHA-256产生256位数据,通常用32字节表示。特别是,在Python 3中,您应该注意到hashlib.sha256("...").digest()返回bytes而不是str

有一种方便方法hexdigest,它产生表示那些字节的十六进制(base16)字符串。您可以使用base32,base58,base64,baseEmoji或任何其他符合您要求的编码。

基本上,你的问题实际上是"我有一个数字,并希望对它进行短编码"。确定可以使用多少个不同的字符(编码基础)并使用它。 PyPI上有许多库可以提供帮助。 python-baseconv可能会派上用场。