【问题标题】:How can I create a key using RSA/ECB/PKCS1Padding in python?如何在 python 中使用 RSA/ECB/PKCS1Padding 创建密钥?
【发布时间】:2010-05-18 19:11:26
【问题描述】:

我正在努力寻找在 ECB 模式下使用 RSA 并在 python 中使用 PKCS1 填充的任何方法。我研究了 pyCrypto,但他们在主分支中没有 PKCS1 填充(但在补丁中)。尽管如此,我还是在 M2Crypto 包中找到了带有 PKCS1 的 RSA,但我不确定是否可以选择 ECB 模式...

【问题讨论】:

    标签: python encryption rsa


    【解决方案1】:

    像 ECB 这样的链式模式对 RSA 没有意义,除非你做错了。

    ECB 用于块密码:输入数据被分成大小相等的块,每个块单独加密。这会导致一些弱点,因此对于分组密码,最好避免使用 ECB 模式。

    RSA 不是分组密码。特别是,RSA 必然会放大加密的消息:使用 1024 位 RSA 密钥(相当典型的大小),可以加密最多 117 字节的消息,但结果是 128 字节的值。

    可以想象接收一条更大的消息,将其拆分为长度为 117 字节(或更短)的单个块,并对每个块分别进行 RSA 加密,但没有人这样做,主要是因为大小增加和 CPU 成本.此外,根本没有研究与拆分和重组相关的安全问题,因此结果很可能很弱。通常,当密码库需要填充模式作为算法名称的一部分时,例如在“RSA/ECB/PKCS1Padding”中,这只是由于名称的语法约束,而链接部分(ECB)实际上被忽略了(这就是 Java 所做的,例如)。

    实际上,当加密一些可能大于最大 RSA 输入大小的数据时,会使用混合加密:RSA 加密的是随机对称密钥(例如,一组 16 个均匀随机字节),并且该密钥用于对称加密(例如使用 AES)实际数据。这更节省空间(因为对称加密不会扩大块)和 CPU 效率(对称加密比非对称加密快得多,尤其是 RSA 解密)。

    【讨论】:

    • 哈哈。非常感谢。更有意义的是为什么我找不到任何支持!我是一个加密菜鸟。这是我的互联网安全课程的练习。显然设置练习的导师不知道他在说什么,或者只通过Java知道。非常感谢您的解释。
    • 实际上我需要加密一些可以用 JAVA 解密的东西,我在 Java 中遇到了 BadPaddingException 错误,因为我没有指定 PKCS1Padding 任何关于如何强制它的想法,即使它不是一个好的想法?
    • 好的,我使用了stuvel.eu/files/python-rsa-doc/reference.html,它从头开始工作。
    • RSA 中需要区块链的原因:armoredbarista.blogspot.in/2012/09/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 2022-12-22
    • 2013-03-12
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多