【问题标题】:Python: How to add RSA padding?Python:如何添加 RSA 填充?
【发布时间】:2010-10-14 04:04:27
【问题描述】:

我一直在研究大多数 python 加密库,我决定使用 PyCrypto 或 M2Crypto。
我放弃了 ezPyCrypto,因为它只支持 MD5 进行签名和 Keyczar,因为它还不够成熟。

所以我了解到,如果未正确填充要加密的文本(或签名哈希),RSA 很容易受到多种攻击。
这是什么意思?
PyCrypto 或 M2Crypto 都没有提到任何关于此的内容,谷歌也没有发现任何相关内容。这些库会自动添加 paddign 吗?怎么知道?

如果上面的答案是否定的,那么什么是适当的填充?

【问题讨论】:

    标签: python encryption rsa


    【解决方案1】:

    PyCrypto 没有添加上述填充。
    M2Crypto 可以。

    M2Crypto 建立在 openSSL 之上,主要支持您需要的所有内容,在 PyCrypto 发出多个弃用警告时仍在维护和更新。

    【讨论】:

    【解决方案2】:

    随机填充的一个原因可能是,如果将完全相同的消息发送给几个人(三)。

    因此,您最好通过之前对您的消息应用某种随机(但可逆)转换来确保您不会发送完全相同的消息。

    也许这就是填充的意义!?

    编辑: 我看了维基百科。我说的是哈斯塔德的攻击。

    【讨论】:

      【解决方案3】:

      我最近努力解决加密问题...这篇文章有助于解释填充是什么:

      http://www.di-mgt.com.au/cryptopad.html

      (方法一似乎对我来说最容易实现)

      如果需要,我可以分享一些代码 sn-ps。

      附:该文件在帮助创建安全密钥方面也派上了用场(谷歌为它)PBKDF2.py - PKCS#5 v2.0 基于密码的密钥派生

      【讨论】:

        【解决方案4】:

        不完全确定,但如果您在 RSA 消息中添加随机组件,它可以防止字典攻击

        【讨论】:

          【解决方案5】:

          首先,您应该使用 AES,因为它是事实上的标准。

          AES 以 16 字节的块大小加密字节。显然,这适用于任何大型数据。但最后一点,显然可能小于 16 字节。

          对于最后一个块,您需要对其进行填充,典型的填充是通过 PCKS7 完成的,这非常简单。

          假设你有一个字符串:“icecream”作为最后一个块。

          "icecream" 是 8 个字节,所以你需要另外 8 个字节来做一个块

          所以你所做的只是将字符 8(不是 '8') 附加 8 次

          "icecream\x08\x08\x08\x08\x08\x08\x08\x08"
          

          将是您的结果字符串。现在您继续加密数据。

          请记住,在解密时,您需要捕获最后一个块,并在使用前去除填充。

          【讨论】:

            猜你喜欢
            • 2020-01-08
            • 2023-03-31
            • 2015-06-22
            • 2017-07-16
            • 2017-07-06
            • 2012-02-06
            • 2012-04-07
            • 2019-02-19
            相关资源
            最近更新 更多