我在格式一系列代码:我怎么可以散列/混淆9-11个字符唯一
AA12345A1
即:[a-z]{2}[0-9]{5}[a-z][0-9]
和
AA12345A123
即:[a-z]{2}[0-9]{5}[a-z][0-9]{3}
我需要创建一个新的任何格式的“代码”从上述任何一种格式以掩盖以1号码结尾的号码和以3号码号码结尾的号码之间的差异(这向用户揭示了我需要隐藏的信息)。
为新的代码格式的约束条件是:
- 它们需要是人类使用(因此,使用大写和小写字母是一个坏主意可用性明智的,也应尽可能短)
- 他们必须是唯一的(9号或11字符的代码应该产生相同的输出)
- 只需要一个单向散列,我从来没有需要获得原代码后面
- 原来的长度代码(9或11个字符)一定不是显而易见的 - 它不需要密码对于外行来说只是不透明的。
是否有任何合适的哈希算法来做到这一点,或有没有人有任何建议这样做的自定义方式?
感谢
但哈希本身并不保证是唯一的。另一方面,SHA-1长于11个字符(甚至不考虑限制值),所以它可能实际上散列到所有给定输入的唯一值。 – 2010-09-29 12:04:23
@Konrad:是的,它并不保证是唯一的。但是你可以计算这个概率,如果这个应用程序没有问题,它可能是一个解决方案,这使得在知道另一个代码时很难“猜测”一个代码。 – 2010-09-29 12:09:34