java - 非密文加密算法

标签 java algorithm encryption hash

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

所需的属性是:

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

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

最佳答案

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

关于java - 非密文加密算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25375568/

相关文章:

java - 如果我使用自己的 key ,为什么需要散列?

java - HSQ Hibernate 更新问题

java - wsimport (xjc) - 为什么列表 getter 总是进行 null 检查?

java - 在 AES 中收缩一些密文 block

c# - 从 7 张牌中选出最好的一手牌(德州扑克)

algorithm - 扩大或缩小不规则多边形

java - Android:定义要使用的加密方式:AES 128 或 AES 256

java - 我是否需要为在 Objective-C 和 Swift 中关闭 Realm 数据库而烦恼?

Java 反射实用程序

c++ - 在偶数个元素的情况下打印链表的中间