哈希算法,字母数字输出最多20个字符

Gia*_*omo 10 hash md5 sha1

我需要一个哈希算法,输出一个长度最多为20个字符的字母数字字符串.我的意思是"字母数字" [a-zA-Z0-9].

输入是规范形式的UUID(示例550e8400-e29b-41d4-a716-446655440000)

另一种方法是有一种方法将SHA1或MD5哈希转换为具有这些限制的字符串吗?

谢谢.

编辑

不需要加密安全.碰撞会使数据不准确,但如果它们偶尔发生,我就可以忍受它.

编辑2

我不知道截断MD5或SHA1会不会经常发生冲突.现在我想知道是否最好将MD5值或SHA1值截断为20个字符.

phi*_*hag 17

只需从GUID的哈希中剪切您不需要的字符.使用良好的散列函数,散列的任何部分的不可预测性与部件的大小成比例.如果你愿意,你可以将它编码为32而不是标准的十六进制16.请记住,这不会显着改善每个字符的熵(仅为25%).

对于非加密用途,是否截断MD5,SHA1或SHA2并不重要.熵也没有任何明显的缺陷.

  • 谢谢.我尝试生成100万个UUID并获取SHA1 hex的前20个字符.没有碰撞.测试脚本:https://gist.github.com/800132 (2认同)