例如,我希望使用python函数blake2b获得的哈希值仅具有(acdefghjklmnpqrstuvwxyz2345679)
答案 0 :(得分:0)
散列是位字符串。您可以根据需要使用一组特定的可打印字符来编码该位字符串。十六进制(使用0123456789abcdef
)是最常见的方式,但是如果您要使用其他字符集,则可以选择这些字符。
要使用十六进制格式对哈希值进行编码(假设您将其作为原始字符串使用,例如标准digest
模块中的hashlib
方法返回的值),请在Python中使用hash.hex()
3和hash.encode('hex')
在Python 2中。hashlib
模块具有方法hexdigest
,可直接返回此编码。
如果要使用单写字母和数字对值进行编码,而不会在0/O
和1/I
上造成混淆,则有一个称为Base32的标准。 Base32在base64
模块的Python中可用。标准编码仅使用大写字母,但是您可以根据需要将其转换为小写字母。具有=
的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将十六进制表示形式转换为整数。