我可以存储完整 SHA-256 哈希的最密集方式(最少字符)是什么?
在hashlib.sha256
对象上调用.digest()
将返回一个 32 字节的字符串 - 存储 256 位数据的最短方法(以 8 位字节作为相关单位),这对于可压缩性目的实际上是随机的。
由于 8 * 32 == 256,这证明没有浪费 - 使用每个位。
查尔斯的回答是绝对正确的。但是,我假设您不希望使用 SHA256 bash 的最短二进制编码 - 32 个八位字节字符串 - 并且想要可打印且有点人类可读的东西。
注意:但是,这并不完全适用于条形码。至少二维码对二进制数据进行编码,因此只需使用digest()
哈希方法 - 这将是您可以在那里使用的最有效的编码。您的 QR 码生成库应该最有可能支持为"原始"二进制字符串生成代码 - 检查您的库文档并找到正确的方法/调用。
SHA 哈希(和其他哈希)不生成或操作字符,它们处理二进制数据。SHA-256产生256位数据,通常用32字节表示。特别是,在 Python 3 中,您应该注意到hashlib.sha256("...").digest()
返回bytes
而不是str
。
有一个方便的方法hexdigest
,它生成表示这些字节的十六进制(base16)字符串。您可以使用 base32、base58、base64、baseEmoji 或任何其他符合您要求的编码。
基本上,你的问题实际上是"我有一个数字,想要一个简短的编码"。确定您可以使用多少个不同的字符(编码基础)并使用它。PyPI 上有许多库可以提供帮助。python-baseconv可能会派上用场。