我想生成具有自定义属性的人类可读哈希 - 例如,指定长度的短字符串,完全由大写字母和不包括0,1,O和I的数字组成(以消除视觉模糊性):
"arbitrary string" --> "E3Y7UM8"
上述形式的7个字符的字符串可能会占用超过340亿个唯一值,出于我的目的,这些值极不可能发生冲突。安全也不是主要问题。
是否存在实现上述内容的现有模块或例程?或者,有人可以建议一个简单的算法吗?
答案 0 :(得分:2)
您可以简单地截断MD5sum算法的开头。它应该具有与整个字符串大致相同的统计属性:
import md5
m = md5.new()
m.update("arbitrary string")
print(m.hexdigest()[:7])
与hashlib
模块相同的代码:
import hashlib
m = hashlib.md5()
m.update("arbitrary string")
print(m.hexdigest()[:7])
答案 1 :(得分:2)
您应该使用的方法与密码单向加密有相似之处。当然,既然你想要阅读,那么一个好的密码功能可能是不可能的。
这就是我要做的事情:
以下是基于以上内容的示例:
https://openapi.etsy.com/v2/private/shops
由于它是一个单向函数(哈希),你显然不需要担心反转过程(你无论如何都不能)。您也可以用可读的字符替换您认为不可读的任何其他字符(我会选择字符的小写版本,例如q而不是Q)
有关base32的更多信息,请访问:https://docs.python.org/3/library/base64.html