对称整数到整数加密

ada*_*Lev 11 python security encryption obfuscation cryptography

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

就像是:

encrypt(1, "secret key") == 67123571122
decrypt(67123571122, "secret key") == 1
Run Code Online (Sandbox Code Playgroud)

这个人提出了几乎相同的问题:整数的对称双射算法
然而我是一个总加密"n00b"我想要一些更实际的例子,如果可能的话,在python中.

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

有什么指针吗?谢谢

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

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

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

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

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

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

Cam*_*ner 4

这取决于您想要的加密安全程度。对于不太安全的情况(在加密意义上 - 如果您并不真正期望受到严重攻击,则可能适合日常使用),那么使用固定密钥的异或将起作用。请注意,它很容易受到一些相当基本的密码分析的影响。

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

然而,RC4 有一些警告,因此请先阅读它。

在这种情况下,分组密码不会成为您的朋友,因为它们的块大小都是 64 位或更多。这意味着您需要将 32 位整数填充为 64 位,然后您将得到 64 位……但您无法选择保留哪一个 32 位。你将无法仅用一半的位来解密它。如果您愿意转向长整型,那么您可以使用 3DES 或 Blowfish。

这完全取决于您要加密的内容以及加密的原因,因此很难给出明确的答案。我希望这至少能让您知道从哪里开始。