非加密加密算法

时间:2014-08-19 04:12:08

标签: java algorithm encryption hash

类似于非加密单向散列(例如,用于构建散列表),我发现自己需要一种不一定加密强度的双向,对称密钥"加密"功能。我的计划是在数据结构的设计中使用它。

所需的属性是:

  • 快速
  • 实施起来并不是非常困难(如果重要,请使用Java)
  • 甚至不需要完全可逆;如果给出明文大小,如果它产生一个小的,预期的恒定数量的可能性,那就没关系。
  • 处理小数据量(例如,"加密"单个64位长)
  • 良好的比特色散特性(即,具有随机数的XOR是次优的,因为序列号最终将与大多数比特共享)。与输入和输出中设置的位数的关系应该是〜random。

是否存在这样的算法,或者Java标准库中的某些内容是否可以用于该角色?

1 个答案:

答案 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实际上是多个单词长,你可以单独处理每个单词 - 根本不安全,但是安全性不是你的目标。它是否足够随机取决于您的数据以及您试图通过散列它来实现的目标。