如何将可变长度字符串转换为16个字符的字符串?

时间:2012-12-06 18:28:03

标签: algorithm hash

我需要将长度为60到100个字符的可变长度字符串转换为16个字符的唯一字符串。请注意,输入也是唯一的。我可以使用一些现有的哈希算法吗?或者还有另一种方法可以实现吗?

2 个答案:

答案 0 :(得分:0)

可变长度60字符串唯一可以超过16个长度字符串。

所以一般的,好的算法是不可能的。这就像从每个字母唯一(a-z)生成一个数字(0-9)

答案 1 :(得分:0)

哈希函数不具备独特的输出原则。如果你实际上少于&lt; 2 ^ 16个不同的输入,它是可能的,但这不是我所知道的任何散列函数的设计目标,你必须创建具有 all <的知识的散列函数/ em>输入。所以你必须模仿它。合理有效的最简单方案似乎是:

  • 保持从输入字符串到整数的关联数组
  • 对字符串进行散列时,请在关联数组中查找
    • 如果它在关联数组中,则返回关联值
    • 否则,让map[input] = map.entry_count()并返回

这为每个输入分配一个唯一的整数,并在O(1)预期时间或O(log n)时间内进行散列,但需要一些空间。然后,如果必须,可以将此整数转换为字符串,例如使用base64编码,十六进制表示法,或者通过在某些字符编码中将其解释为字符串(尽管必须注意最终使用有效字符串)。每个结果都会给你带来超过10 ^ 16个结果,并且使得字符串不太可能被混淆为数字。