有什么方法可以定义哈希值组成的字符?

时间:2019-03-14 05:34:42

标签: python hash cryptography

例如,我希望使用python函数blake2b获得的哈希值仅具有(acdefghjklmnpqrstuvwxyz2345679)

1 个答案:

答案 0 :(得分:0)

散列是位字符串。您可以根据需要使用一组特定的可打印字符来编码该位字符串。十六进制(使用0123456789abcdef)是最常见的方式,但是如果您要使用其他字符集,则可以选择这些字符。

要使用十六进制格式对哈希值进行编码(假设您将其作为原始字符串使用,例如标准digest模块中的hashlib方法返回的值),请在Python中使用hash.hex() 3和hash.encode('hex')在Python 2中。hashlib模块具有方法hexdigest,可直接返回此编码。

如果要使用单写字母和数字对值进行编码,而不会在0/O1/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将十六进制表示形式转换为整数。