简单整数加密

时间:2010-05-04 23:03:38

标签: algorithm language-agnostic cryptography

是否有一个加密整数的简单算法?也就是说,函数E(i,k)接受n位整数和密钥(任何类型)并产生另一个不相关的n位整数,当它被馈入第二函数D(E(i)时, k)(连同键)产生原始整数?

显然,您可以执行一些简单的可逆操作,但它们似乎都产生了明确相关的输出(例如,连续输入导致连续输出)。当然,还有加密强的标准算法,但它们不能产生足够小的输出(例如32位)。我知道任何32位加密都可能是强制性的,但我不是在寻找加密强大的东西,只是看起来随机的东西。从理论上讲,它应该是可能的;毕竟,我可以通过随机配对每个整数来创建一个字典。但是我希望能有一点内存密集的东西。

编辑:谢谢你的回答。简单的XOR解决方案将无法工作,因为类似的输入将产生类似的输出。

9 个答案:

答案 0 :(得分:10)

这不会等于Block Cipher块大小= 32位吗?

不是很受欢迎,因为它容易打破。但理论上可行。 这是Perl中的一个实现: http://metacpan.org/pod/Crypt::Skip32

更新:另见Format preserving encryption

更新2:RC5支持32-64-128位的块大小

答案 1 :(得分:4)

我前段时间写过关于如何从分组密码生成“加密安全置换”的an article,这听起来像你想要的。它包括使用折叠来减小分组密码的大小,以及处理非2次幂范围的技巧。

答案 2 :(得分:2)

Ayden是我开发的一种算法。它结构紧凑,速度快,看起来非常安全。它目前可用于32位和64位整数。它位于公共领域,您可以从http://github.com/msotoodeh/integer-encoder获取。

答案 3 :(得分:1)

一个简单的:

rand = new Random(k);
return (i xor rand.Next())

(与rand.Next()而不是k相关的点是,在给定iE(i,k)的情况下,您可以通过{{k获得k = i xor E(i,k) 1}})

答案 4 :(得分:0)

您可以对密钥进行n位哈希(假设它是私有的),并使用原始整数进行哈希加密,并使用加密整数进行加密。

可能不是加密固体,但根据您的要求,可能就足够了。

答案 5 :(得分:0)

如果你只是想看起来随机而不关心安全性,那么只需交换位数即可。你可以简单地反转位串,所以高位变为低位,第二高,第二低等,或者你可以做一些其他随机排列(例如1到4,2到7 3到1等等。

答案 6 :(得分:0)

您想要加密多少个整数?您想要处理多少关键数据?

如果您要加密的项目很少,并且您愿意处理与您想要加密的数据一样长的关键数据,那么一次性填充非常简单(只是一个XOR操作)并且在数学上牢不可破。

缺点是保持密钥保密的问题与保密数据的问题一样大。

它还有缺陷(每当有人决定尝试使用它时会一次又一次地运行)如果您使用任何快捷方式 - 例如使用非随机密钥或常用密钥使用有限长度的密钥并回收它 - 它成为存在的最弱密码。好吧,也许ROT13比较弱。

但是严肃地说,如果你正在加密一个整数,无论​​你决定使用哪种密码,你还要用密钥做什么?保持密钥的秘密将是一个与保持整数秘密一样大(或更大)的问题。如果你要加密一堆整数,只需使用一个标准的,经过同行评审的密码,就像你会在许多加密库中找到的一样。

RC4将产生尽可能少的输出,因为它是一个流密码。

答案 7 :(得分:0)

用一两个素数对它进行异或怎么样?在尝试分析它时,交换位似乎非常随机 尝试使用素数对其进行异或运算,然后在位移后进行。

答案 8 :(得分:0)

使用/ dev / random

对其进行异或