代码之家  ›  专栏  ›  技术社区  ›  Adam Matan

使用数字加密文本

  •  5
  • Adam Matan  · 技术社区  · 15 年前

    欧拉计划

    我最近开始解决一些 Project Euler 谜语。我发现这个网站上的讨论论坛有点令人沮丧(大多数讨论都是封闭的,而且没有很好的衔接),所以我决定 publish my Python solutions on launchpad 供讨论。

    问题是,发布这些解决方案似乎很不道德,因为它会让其他人在不进行编程工作的情况下获得声誉,而该网站对此深感不满。

    我的加密问题

    我想加密我的答案,这样只有那些已经解开谜语的人才能看到我的代码。逻辑键将是谜语的答案,它始终是数字。

    为了防止对我的答案进行暴力攻击,我想找到一种加密算法,它需要很长的时间(几秒钟)才能运行。

    你知道这种算法吗?我想要一个python包,我可以通过一个可能存在可移植性问题的外部程序附加到代码上。

    谢谢,

    亚当

    7 回复  |  直到 10 年前
        1
  •  4
  •   erickson    15 年前

    听起来人们必须编写自己的解密工具,或者使用现成的工具,或者使用现成的组件来解密你的文章。

    pbkdf2是基于密码的密钥派生的标准化算法,在pkcs_5中定义。基本上,您可以调整“迭代”参数,以便从密码(欧拉问题的答案)中派生密钥需要几秒钟。然后,该密钥可以用于任何常见的对称加密算法,如AES-128。

    这具有大多数加密库已经支持pbkdf2的优势。实际上,您可能会发现邮件客户端支持基于密码的S/MIME邮件加密。然后你可以发布一个S/MIME,人们可以通过邮件客户端阅读它。不幸的是,我的邮件客户端(雷鸟)只支持公钥加密。

        2
  •  2
  •   msw    15 年前

    我认为,尹朱钉住了它的社会方面,并旋风技术。使用您的首选方法:

    python decrypt.py --problem=123 --key=1234567
    

    Google可以很容易地获得密钥号,即使没有它,通过一百万个密钥(假设中位数的密钥长度为5位小数,得到的密钥少于20位)也非常快。如果我想更聪明,我可以使用纯文本假设(例如 import , for )大大减少了我的搜索空间。

    对于所有的麻烦,你最好使用一些非常复杂的东西,比如:

    >>> print codecs.getencoder('rot_13')('import codecs')[0]
    vzcbeg pbqrpf 
    

    如果你想要解决方案的项目欧拉问题123,你将不得不击败我…

        3
  •  1
  •   Community CDub    8 年前

    是的,您可以使用几乎任何对称的加密算法来实现这一点:例如,dsa或aes;只需使用整数作为密钥,并将密钥填充到加密算法密钥所需的长度,然后使用该密钥来解密答案。

    请记住,如果扩展一个短密钥,加密就不会很好了。加密的强度与密钥长度和算法本身的关系远大于运行所需的时间。

    这个 question 似乎有一些库可以与Python一起使用的示例。

        4
  •  0
  •   Aren    15 年前

    只需使用三重DES并为每次迭代使用不同的键,使用数字生成三个键中的每一个。用一些文字填充键的长度,你就可以了。

    Triple DES旨在提高对抗蛮力的效果。

    这不是世界上最安全的选择,但我会阻止大多数的畜生。

        5
  •  0
  •   Yin Zhu    15 年前

    如果你加密你的答案,那些解决了问题的人根本不想用这样的努力看到你的答案,前提是他们已经有足够的答案可以在答案页上看到。那些看不见的人。然后你的工作就没那么有用了。

    顺便说一句,有很多地方为项目欧拉提供答案,例如 Haskell answers , Clojure answers , F# answers . 如果有人只想得到问题的答案,他/她可以简单地运行程序。如果python非常流行,那么google“python euler xx”会给你很多博客来解决一个特定的问题。

        6
  •  0
  •   Nick Johnson    15 年前

    最简单的方法是使用安全散列函数(如sha-1)散列答案,然后提供散列,以便用户验证其答案。如果你想让暴力强迫变得更困难,迭代hash-eg,提供sha1的n个递归应用程序的结果,其中n是你选择使暴力强制变得困难的一些参数。

    但是,如果可能的答案的数量很小,那么即使使用昂贵的哈希函数,也很难防止有人强行执行它。

    编辑:对不起,我误解了你原来的问题。如果你想加密你的答案,你可以使用上面的结果散列作为答案的加密密钥,而不是发布散列。

        7
  •  0
  •   John Y    15 年前

    如果您想要一个易于使用和分发的加密程序,我推荐使用PaulRubin的 p3.py . 它可能是在快速的一面,因为它是多么的安全,但由于你似乎需要一个跨栏跳而不是一个防围攻的墙,这可能是一个很好的选择为你的目的。

    你也可以调查 rijndael.py ,这是AES的一个实现,比p3.py慢。