简单的整数加密
有没有简单的算法来加密整数? 也就是说,一个函数E(i,k)接受一个n位整数和一个关键字(任何类型),并产生另一个不相关的n位整数,当它馈入第二个函数D(E(i) k)(和关键字一起)产生原始整数?
很明显,您可以执行一些简单的可逆操作,但它们似乎都会产生清晰相关的输出(例如连续输入导致连续输出)。 此外,当然,还有密码学强大的标准算法,但它们不会产生足够小的输出(例如32位)。 我知道任何32位密码术都可能是蛮横的,但我并不是在寻找密码强的东西,而只是看起来随机的东西。 从理论上讲,这应该是可能的; 毕竟,我可以通过随机配对每个整数来创建一本字典。 但我希望能少一些内存密集型的东西。
编辑:谢谢你的答案。 简单的XOR解决方案将不起作用,因为类似的输入会产生类似的输出
这不等于块大小= 32位的分组密码 ?
不太受欢迎,因为它很容易中断。 但理论上可行。 以下是Perl中的一个实现:http://metacpan.org/pod/Crypt::Skip32
更新:另请参阅保留加密的格式
更新2:RC5支持32-64-128位的块大小
前段时间我写了一篇关于如何从分组密码生成'加密安全置换'的文章,这听起来像你想要的。 它涵盖了使用折叠来减小分组密码的大小,以及处理非2次幂范围的技巧。
一个简单的:
rand = new Random(k);
return (i xor rand.Next())
(使用rand.Next()
而不是k
是否定的,否则给定i
和E(i,k)
,可以通过k = i xor E(i,k)
得到k
)