【问题标题】:Non-cryptographic encryption algorithm非密码加密算法
【发布时间】:2014-08-19 04:12:07
【问题描述】:

类似于非加密单向哈希(例如,用于构建哈希表),我发现自己需要一个非必要加密强度的双向对称密钥“加密”函数。我的计划是在数据结构的设计中使用它。

所需的属性是:

  • 快速
  • 实现起来并不难(如果重要的话,在 Java 中实现)
  • 甚至不需要完全可逆;如果给定明文大小,如果它产生一个小的、预期的恒定数量的可能性,那就没问题了。
  • 很好地处理小数据大小(例如,“加密”单个 64 位长)
  • 良好的位分散特性(即,XOR 与随机数是次优的,因为序列号最终会与大多数位共享)。与输入和输出中设置的位数的关系应该是随机的。

这样的算法是否存在,或者可以将 Java 标准库中的某些东西硬塞到该角色中?

【问题讨论】:

  • 为什么不直接使用像 AES 这样的真实的呢?尤其是最后一个要求。
  • 我怀疑像 AES 这样的东西,即使有处理器支持,对于这些目的来说也是非常过分的(阅读:比它需要的慢)。例如,大量非密码散列函数很好地分散了比特。我也只是好奇这是否是一种已定义的算法。
  • 输出的大小必须是多少?
  • @Bryce 那么也许是标准加密算法的缩减轮变体?例如 5 轮 AES128。

标签: java algorithm encryption hash


【解决方案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 素数,如果 x 限制为 (0, p-1),则这是 http://en.wikipedia.org/wiki/Universal_hashing 的示例。其中 x 实际上是多个单词,您可以单独处理每个单词 - 根本不安全,但安全不是您的目标。它是否足够随机取决于您的数据以及您试图通过散列来实现的目标。

【讨论】:

  • 谢谢,看起来标准分组密码的减少轮次版本是可行的方法。
猜你喜欢
  • 1970-01-01
  • 2011-10-18
  • 1970-01-01
  • 1970-01-01
  • 2014-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-30
相关资源
最近更新 更多