代码之家  ›  专栏  ›  技术社区  ›  adamJLev

对称整数到整数加密

  •  10
  • adamJLev  · 技术社区  · 16 年前

    类似于:

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

    这家伙问的问题差不多一样: Symmetric Bijective Algorithm for Integers
    不过,作为一个完全加密的“n00b”,我希望有一些更实际的例子,如果可能的话,在python中。

    我知道我需要使用某种分组密码,但在保持加密结果仍然是数字和短(可能是长而不是整数)的部分,我相当迷茫

    更新-
    我有一个web服务,其中每个“对象”都有一个URL,例如: example.com/thing/123456/

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

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

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

    5 回复  |  直到 9 年前
        1
  •  4
  •   Cameron Skinner    16 年前

    这取决于你想要的密码安全程度。对于不太安全的情况(从加密的角度来说——如果你不希望受到严重的攻击的话,日常使用可能很好),那么使用固定密钥的XOR将起作用。只需注意,它将很容易受到一些相当基本的密码分析。

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

    在这种情况下,块密码将不是您的朋友,因为它们都有64位或更多的块大小。这意味着您需要将32位整数填充到64位,然后您将得到64位返回…但您不能选择保留哪个32位。你只用一半的比特就不能解密它。如果你很乐意搬到朗斯,那么你可以使用3DES或河豚。

    这完全取决于你到底在加密什么以及为什么,所以很难给出一个明确的答案。我希望这至少能让你知道从哪里开始。

        2
  •  1
  •   Jcs    16 年前

    Perfect Block Ciphers with Small Blocks 和 the slides 在2007年FSE大会上的演讲。

    本文说明了如何随机选择n个元素的一个排列(例如0到n-1之间的整数),这可以看作是这组n个元素的一个密码。

        3
  •  1
  •   Nick Johnson    16 年前

    XTEA 密码,以64位整数作为数据块。

        4
  •  0
  •   Martin Beckett    16 年前

    你想只加密一个“int”即q 32/64位数字吗?
    那么最简单的方法就是用一个32/64位的密钥对它进行异或运算。

        5
  •  0
  •   Mathieu IKO Craig McQueen    10 年前

    我已经开发了一个紧凑,快速,希望安全的算法,我称之为艾登。在公共领域 can be downloaded from Github . 希望它有用。