如何在python中使用RSA / ECB / PKCS1Padding创建密钥?

时间:2010-05-18 07:44:24

标签: python encryption rsa

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

1 个答案:

答案 0 :(得分:10)

ECB等链接模式对RSA毫无意义,除非你做错了。

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

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

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

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