类似于非加密单向散列(例如,用于构建散列表),我发现自己需要一种不一定加密强度的双向,对称密钥"加密"功能。我的计划是在数据结构的设计中使用它。
所需的属性是:
是否存在这样的算法,或者Java标准库中的某些内容是否可以用于该角色?
答案 0 :(得分:1)
一种选择是使用一个易于实现的密码,如http://en.wikipedia.org/wiki/Blowfish_%28cipher%29,并以减少的轮数运行 - 例如从16到3. 3 - 因为在http://en.wikipedia.org/wiki/Feistel_cipher#Theoretical_work中使用了3轮。
另一个是使用h(x)= a * x + b mod p(如果a是奇数则使用mod 2 ^ n)。对于p prime,如果x被限制为(0,p-1),则这是http://en.wikipedia.org/wiki/Universal_hashing的示例。其中x实际上是多个单词长,你可以单独处理每个单词 - 根本不安全,但是安全性不是你的目标。它是否足够随机取决于您的数据以及您试图通过散列它来实现的目标。