您如何便宜地对32位int进行双向加密,以使每个数字都映射到该空间中的其他int并以难以预测的方式返回?
当然,不需要在映射表中预存储42.9亿个整数。
您想要的是32位分组密码。不幸的是,由于短块大小的缺点,大多数块密码都是64位或更多。如果您可以处理的加密int大小是输入的两倍,那么您可以使用Blowfish,TDES或其他经过严格审查的64位块密码。
如果您确实需要32位并且不介意降低安全性,那么它很容易将Feistel网络密码(如Blowfish)缩减为任意的块长度,该长度应为2的倍数并且小于起始密码。对于Blowfish,只需将您的输入数字平均分配到两个半块之间,然后将F函数的输出和P值修整为目标块大小的1/2。照常为算法设置密钥后,就可以完成所有操作。