1

我有由字母、数字和特殊字符(电子邮件地址)组成的唯一可变长度字符串列表。列表中的每个电子邮件地址都是唯一的。

我需要一个单向哈希函数(我不需要能够从生成的数字中检索原始值),它将用盐对字符串进行哈希处理并生成一个 12 位数字。

我想确保唯一性,因此我将检查先前生成的值列表以检测冲突,然后在发生冲突时生成一个新数字。可预测性不是问题。

理想情况下,我希望这个函数用 Groovy 编写,但 Java 也可以。

4

1 回答 1

6

我需要保证每个生成的数字都是唯一的。

那么这显然会是一个问题。可能的输入字符串多于可能的输出值。特别是,每个可能的输出值(12 位字符串)都是可能的输入值。因此,如果所有这些都获得唯一的输出值,则不可能为任何其他输入值留下任何输出值。

当然,您总是可以记录您遇到的每个电子邮件地址(因此第一个以 000000000000 结尾,第二个以 000000000001 等结尾),但这是一个存储问题,而不是散列本身。如果没有后备存储,您无法仅从输入获得输出

于 2012-05-16T17:23:32.483 回答