为与ora_hash

时间:2017-01-03 14:23:04

标签: java string oracle random hashcode

我需要为Java中的任意字符串生成随机但可重现的数字。对于SQL中的相同要求,我使用了Oracle提供的函数ORA_HASH

  

ORA_HASH为表达式生成哈希值。您可以使用它将一组值随机分配到多个存储桶中进行分析,或生成一组随机数。

该函数有三个参数:哈希表达式,最大桶数和种子。就我在SQL中的用途而言,最大桶数已设置为允许的最大值。

我的想法是在Java中实现ORA_HASH(具有最大桶数)。为此,我想将String.hashCode()与随机种子结合起来。

但是,我不知道如何组合哈希码和种子

  1. 没有出现额外的哈希冲突(xor可能不满足此要求)
  2. 种子和原始表达都不能(轻松)从结果中重现(简单+不满足此要求)
  3. 想要更好的解决方案吗?

    编辑回复评论

    我需要(几乎)字符串的唯一伪标识符来使它们匿名化。我赞成"匿名" /"难以扭转"结束"几乎是独特的" /"更少的碰撞"。我的印象是max_bucket_number中的ora_hashseed支持"较少的碰撞"和ora_hash支持"难以扭转"。标准消息摘要(SHA,MD5)不合适,因为要散列的字符串来自字典;如果没有种子/盐,彩虹表的攻击就会显露出来。使用盐(例如bcrypt)的一些算法产生非常长的散列。 var n = $( "input:checked" ).length; 似乎是最好的权衡。

0 个答案:

没有答案