python - 对称整数到整数加密

标签 python security encryption cryptography obfuscation

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

类似于:

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

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

我知道我需要使用某种分组密码,但我对保持加密结果仍然是数字并且有点短(可能是 long 而不是 int)的部分感到很迷茫

有什么指点吗?谢谢

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

现在,这些 ID 是连续的。我想隐藏它们是连续的(数据库 ID)这一事实。

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

因此,通过某种双向数字加密,URL ID 将完全不是连续的,而且要找到更多这样的对象需要花费相当多的时间。 (此外,请求受到限制)

我想保留这个数字而不是任意字符串的唯一原因是这样的更改是一个完全的直接替换,并且在没有任何其他代码更改的情况下一切正常。

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

最佳答案

这取决于您想要的加密安全程度。对于不太安全的(在加密意义上 - 如果您真的不希望受到严重攻击,可能适合日常使用)那么使用固定 key 的 XOR 将起作用。请注意,它很容易受到一些相当基本的密码分析的攻击。<​​/p>

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

但是,RC4 有一些注意事项,所以请先阅读它。

在这种情况下, block 密码将不是您的 friend ,因为它们的 block 大小都为 64 位或更多。这意味着您需要将 32 位整数填充为 64 位,然后您将返回 64 位……但您无法选择保留哪 32 位。您将无法仅用一半的位来解密它。如果您愿意转向多头,那么您可以使用 3DES 或 Blowfish。

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

关于python - 对称整数到整数加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4028998/

相关文章:

java - 拦截对 javax.crypto 的调用

mysql - CF8和AES解密MySQL AES : encodings are not same

python - Pandas 按多列分组和排序

python - JSON解码错误: Expecting value: line 1 column 1 (char 0) error in local machine environment but not in server based environment

javascript - 选择器在我的网站上解释为 HTML。攻击者可以轻易利用它吗?

java - 有没有办法逃避打印语句并将字符串变量视为java中的有效代码?

python - 需要帮助垂直打印列表

python - 如何在打开的 CV 中旋转边界框并裁剪它(python)

java - 如何在 Java 中结合 RSA 自适应身份验证?

基于 Java 密码的加密在 Linux 上失败