如果您的目标是无损压缩或散列20个字符的随机输入字符串(每个字符可以是[AZ],[0-9]或 - )到6个字符的输出字符串.这在理论上是不可能的.
在信息论中,给定离散随机变量X={x|x1,...,xn},Shannon熵 H(X)定义为:
在哪里p(xi)可能性X = xi.在你的情况下,X有37个可能的字符中的20个,所以它可能在{x|x1,...,xn}哪里n = 37^20.假设37个字符具有相同的概率(也就是输入字符串是随机的),那么p(xi) = 1/37^20.所以输入的Shannon熵是:

.甲char在普通计算机可容纳8位,从而使6个字符能容纳48位.无法通过6个字符保存104位信息.你需要至少15个字符来代替它.
如果您确实允许丢失并且必须将20个字符散列为6个字符,那么您正在尝试将37^20值哈希到128^6键.它可以完成,但你会得到大量的哈希冲突.
在你的情况下,假设你用最均匀的方式对它们进行哈希处理(否则会更糟),对于每个输入值,平均有5.26个其他输入值与它共享相同的哈希键.通过生日攻击,我们可以预期在大约2亿次试验中发现碰撞.普通笔记本电脑可以在不到10秒的时间内完成.所以我认为这不是一个安全的哈希.
但是,如果您坚持这样做,您可能需要阅读Hash函数算法.它列出了许多算法供您选择.祝好运!