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

问题描述 投票:0回答:2

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

python hash sha
2个回答
3
投票

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

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


2
投票

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.