我需要的是一个可逆函数,它将长(64位整数)转换为另一个长数,对用户来说似乎是"随机的"(但实际上是确定性的),因此3个后续数字转换为3个数字彼此完全不同.
很容易做到这一点而不是可逆的,但事实证明这部分非常困难.
基本上它与可逆散列函数是一样的问题?,但我需要超过2 ^ 32个不同的值.
有任何想法吗?
PS:我将用Java编写它,但问题本身非常通用.
这些是分组密码的基本要求,通常使用Feistel结构实现:https://en.wikipedia.org/wiki/Feistel_cipher
创建低32位的散列并将其异或成高32位
交换低32位和高32位
重复几次.