Java 为与ora_散列相当的字符串生成随机且可复制的散列代码
我需要为Java中的任意字符串生成随机但可复制的数字。对于SQL中的相同要求,我使用了Oracle提供的函数: ORA_散列为表达式生成散列值。您可以使用它将一组值随机分配到多个bucket中进行分析,或者生成一组随机数 该函数有三个参数:散列表达式、最大桶数和种子。出于我在SQL中的目的,已将最大存储桶数设置为允许的最大值 我的想法是在Java中实现Java 为与ora_散列相当的字符串生成随机且可复制的散列代码,java,string,oracle,random,hashcode,Java,String,Oracle,Random,Hashcode,我需要为Java中的任意字符串生成随机但可复制的数字。对于SQL中的相同要求,我使用了Oracle提供的函数: ORA_散列为表达式生成散列值。您可以使用它将一组值随机分配到多个bucket中进行分析,或者生成一组随机数 该函数有三个参数:散列表达式、最大桶数和种子。出于我在SQL中的目的,已将最大存储桶数设置为允许的最大值 我的想法是在Java中实现ORA_HASH(最大存储桶数)。为此,我想将String.hashCode()与一个随机种子组合起来 但是,我不知道如何将hashcode和se
ORA_HASH
(最大存储桶数)。为此,我想将String.hashCode()
与一个随机种子组合起来
但是,我不知道如何将hashcode和seed结合起来,以便
xor
可能不满足此要求)+
不能满足此要求)我需要(几乎)唯一的字符串伪标识符来使它们匿名化。我更喜欢“匿名化”/“难以逆转”,而不是“几乎独一无二”/“更少冲突”。我的印象是,
ora\u hash
中的高max\u bucket\u编号
支持“较少冲突”,而seed
支持“难以逆转”。标准消息摘要(SHA、MD5)不适合,因为要散列的字符串来自字典;如果没有种子/盐,彩虹桌攻击将揭示这些单词。一些使用salt(例如bcrypt)的算法会生成非常长的哈希ora\u hash
似乎是最好的折衷办法。您是否坚持在数据库中使用ora\u hash
?如果不是,为什么不使用Oracle和Java都支持的标准哈希算法呢?从Oracle,您可以使用。(这些都不是“随机的”——你可能想重新表述一下……)这是一个完全不同的背景。我这里没有可用的Oracle,只是借用了ora\u hash
的思想。此外,没有必要保证结果是一致的。据我所知,ora_hash
是“随机”的,因为种子是随机的:也就是说,如果你不知道种子,你就无法预测结果。你打算如何使用它?我这样问是因为你想要两个通常不应该同时需要的条件。对数据库中的“分组依据”之类的内容进行哈希处理需要管理冲突,但不要求“取消哈希”异常困难。对密码之类的内容进行哈希处理需要非常难以逆转,但并不特别担心冲突。这两种应用都有非常好的算法。为什么你同时需要这两个条件?@mathguy编辑了这个问题来回答你的正确观点!