对称整数到整数加密

时间:2010-10-27 00:02:05

标签: python security encryption cryptography obfuscation

我需要一些关于如何将int加密到另一个int的指针或实际示例,并且需要一个密钥来解密该值。

类似的东西:

encrypt(1, "secret key") == 67123571122
decrypt(67123571122, "secret key") == 1

这家伙几乎问同样的问题:Symmetric Bijective Algorithm for Integers
但是我是一个完全加密的“n00b”我想要一些更实际的例子,如果可能的话,在python中。

我知道我需要使用某种分组密码,但我很遗憾的是保持加密结果仍然是数字而且有点短(可能是长而不是int)

任何指针?感谢

更新 - 为什么我要这样做?
我有一个Web服务,每个“对象”都有一个URL,例如: example.com/thing/123456/

现在,这些ID是顺序的。我想隐藏它们是顺序的(数据库ID)。

这些页面上的东西不是“绝密”或类似的东西,但是对于某人来说,窥探其他随机对象并不像在URL中增加该ID那样容易。

因此,对于某种双向数字加密,URL ID根本不会是连续的,并且需要花费相当多的时间才能找到更多这些对象。 (此外,请求受到限制)

我想保留这个数字而不是任意字符串的唯一原因是这个更改是一个完全替换,并且事情只会在没有任何其他代码更改的情况下工作。

另外,我不能只生成新的随机数据库ID。我必须在应用程序中处理这个加密/解密。

5 个答案:

答案 0 :(得分:3)

这取决于您想要的加密安全性。对于非常安全的(在加密意义上 - 如果你真的不期待严重的攻击,可能对日常使用来说很好),那么带有固定密钥的XOR将起作用。请注意,它很容易受到一些相当基本的密码分析的影响。

如果你想要真正的加密,你可能不得不使用像RC4这样的流密码。您可以获取32位密钥流并将其与您的值进行异或加密。只要你为每个值获得一个新的32位密钥流,你就可以了。

然而,RC4有一些警告,所以请先阅读它。

在这种情况下,分组密码不会是你的朋友,因为它们的块大小都是64位或更多。这意味着你需要将32位整数填充到64位,然后你将得到64位...但你不能选择保留32位。你只能用一半的比特来解密它。如果你很乐意转向longs,那么你可以使用3DES或Blowfish。

这完全取决于您正在加密的内容和原因,因此很难给出明确的答案。我希望至少可以了解从哪里开始。

答案 1 :(得分:1)

您可以查看本文:FSE 2007大会上的演示文稿的Perfect Block Ciphers with Small Blocksthe slides

本文解释了如何随机选择n个元素的排列(例如0到n-1之间的整数),这可以被视为这组n个元素的密码。

答案 2 :(得分:1)

我发布到该问题的答案也适用于您:使用短分组密码。假设您的标识符是64位,实际上,您可以简单地使用XTEA密码,使用64位整数作为数据块。

答案 3 :(得分:0)

您想加密一个'int'即q 32/64位数?
然后最简单的方法是使用32/64位密钥对其进行异或。

答案 4 :(得分:0)

简单XOR不能称为加密。混淆是一个更恰当的词。 我开发了一种紧凑,快速且有希望的安全算法,我称之为Ayden。它位于公共领域can be downloaded from Github。希望它有用。