我需要为Java中的任意字符串生成随机但可重现的数字。对于SQL中的相同要求,我使用了Oracle提供的函数ORA_HASH
:
ORA_HASH为表达式生成哈希值。您可以使用它将一组值随机分配到多个存储桶中进行分析,或生成一组随机数。
该函数有三个参数:哈希表达式,最大桶数和种子。就我在SQL中的用途而言,最大桶数已设置为允许的最大值。
我的想法是在Java中实现ORA_HASH
(具有最大桶数)。为此,我想将String.hashCode()
与随机种子结合起来。
但是,我不知道如何组合哈希码和种子
xor
可能不满足此要求)+
不满足此要求)想要更好的解决方案吗?
编辑回复评论
我需要(几乎)字符串的唯一伪标识符来使它们匿名化。我赞成"匿名" /"难以扭转"结束"几乎是独特的" /"更少的碰撞"。我的印象是max_bucket_number
中的ora_hash
高seed
支持"较少的碰撞"和ora_hash
支持"难以扭转"。标准消息摘要(SHA,MD5)不合适,因为要散列的字符串来自字典;如果没有种子/盐,彩虹表的攻击就会显露出来。使用盐(例如bcrypt)的一些算法产生非常长的散列。 var n = $( "input:checked" ).length;
似乎是最好的权衡。