可逆的"哈希"函数,从64位整数到64位整数

Ars*_*sen 7 algorithm combinations

我需要的是一个可逆函数,它将(64位整数)转换为另一个数,对用户来说似乎是"随机的"(但实际上是确定性的),因此3个后续数字转换为3个数字彼此完全不同.

很容易做到这一点而不是可逆的,但事实证明这部分非常困难.

基本上它与可逆散列函数是一样的问题,但我需要超过2 ^ 32个不同的值.

有任何想法吗?

PS:我将用Java编写它,但问题本身非常通用.

Mat*_*ans 8

这些是分组密码的基本要求,通常使用Feistel结构实现:https://en.wikipedia.org/wiki/Feistel_cipher

  1. 创建低32位的散列并将其异或成高32位
  2. 交换低32位和高32位
  3. 重复几次.