Python的自定义哈希函数

时间:2016-03-16 17:28:59

标签: python hash

我想生成具有自定义属性的人类可读哈希 - 例如,指定长度的短字符串,完全由大写字母和不包括0,1,O和I的数字组成(以消除视觉模糊性):

"arbitrary string"  -->  "E3Y7UM8"

上述形式的7个字符的字符串可能会占用超过340亿个唯一值,出于我的目的,这些值极不可能发生冲突。安全也不是主要问题。

是否存在实现上述内容的现有模块或例程?或者,有人可以建议一个简单的算法吗?

2 个答案:

答案 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)

您应该使用的方法与密码单向加密有相似之处。当然,既然你想要阅读,那么一个好的密码功能可能是不可能的。

这就是我要做的事情:

  1. 获取电子邮件的MD5哈希值
  2. 转换已消除O和I
  3. 的base32
  4. 将任何不可读的字符替换为可读字符
  5. 以下是基于以上内容的示例:

    https://openapi.etsy.com/v2/private/shops
    

    由于它是一个单向函数(哈希),你显然不需要担心反转过程(你无论如何都不能)。您也可以用可读的字符替换您认为不可读的任何其他字符(我会选择字符的小写版本,例如q而不是Q)

    有关base32的更多信息,请访问:https://docs.python.org/3/library/base64.html