我可以存储完整SHA-256哈希的最密集方式(最少字符)是什么?
在.digest()
对象上调用hashlib.sha256
将返回一个32字节的字符串 - 最短的方式(以8位字节作为相关单元)来存储256位数据,这对于压缩性目的而言实际上是随机的。
由于8 * 32 == 256,这可以证明没有浪费 - 每一位都被使用。
查尔斯的回答绝对正确。但是,我假设你不想使用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可能会派上用场。