【发布时间】:2019-08-04 22:31:11
【问题描述】:
例如,我希望使用 python 函数 blake2b 获得的哈希值只有 (acdefghjklmnpqrstuvwxyz2345679)
【问题讨论】:
标签: python hash cryptography
例如,我希望使用 python 函数 blake2b 获得的哈希值只有 (acdefghjklmnpqrstuvwxyz2345679)
【问题讨论】:
标签: python hash cryptography
哈希是一个位串。如果需要,您可以使用一组特定的可打印字符编码此位字符串。十六进制(使用0123456789abcdef)是最常用的方式,但如果您想要一组不同的字符,您可以选择这些。
若要将哈希值编码为十六进制,假设您将其作为原始字符串,如标准 hashlib 模块中的 digest 方法返回的值,请在 Python 3 中使用 hash.hex(),在 Python 3 中使用 hash.encode('hex') Python 2. hashlib 模块有一个方法 hexdigest 直接返回这个编码。
如果您想在0/O 和1/I 上使用单一大小写字母和数字对值进行编码,而不会混淆1/I,则有一个称为Base32 的标准。 Base32 在 Python 中的 base64 模块中可用。标准编码仅使用大写字母,但您可以根据需要转换为小写字母。带有= 的 Base32 焊盘,但您可以将它们移除以进行存储。
import base64, hashlib
hash = hashlib.new('SHA256', b'input').digest()
b32_hash = base64.b32encode(hash).lower().rstrip(b'=')
如果您确实需要特定的 30 个字符集,可以使用 int(….hexdigest(), 16) 然后 convert that integer to a string using the digits of your choice 将十六进制表示转换为整数。
【讨论】: