【发布时间】:2013-12-05 03:20:20
【问题描述】:
我有一组现有的 Python 代码,它使用原始(教科书)RSA 加密机制来加密小块数据。具体来说,python 代码将公钥加载到变量 publickey 中,然后使用以下代码对该数据进行加密:
ciphertext = publickey.encrypt(plaintext,None)
是的,我已阅读免责声明“此函数执行普通的原始 RSA 加密(教科书)。在实际应用中,您总是需要使用适当的加密填充,......”不幸的是,我无法在现在,所以我坚持使用这个“教科书”加密命令。
请注意,即使此命令不使用任何填充方案,它似乎仍然能够加密任何(适当小)数量的明文。换句话说,明文可以是任意长度,不超过 RSA 施加的任何限制。
但是,现在我想在 IOS 应用程序中使用 OPENSSL C 库来执行相同的 RSA 加密。我无法弄清楚如何做与 python 函数完全相同的事情。 OPENSSL 有一个 RSA_public_encrypt 方法,您可以在其中传递明文的大小、明文本身、包含公钥信息的 RSA 对象指针和 RSA 填充机制。为了复制 python 在加密库中所做的事情,我想我可以使用 RSA_NO_PADDING 作为填充机制。问题是 OPENSSL 在他们的文档中声明,如果您使用 RSA_NO_PADDING,那么要加密的明文长度必须完全等于某个值: RSA_Size(rsa) 其中 rsa 是指向传入的 RSA 对象的指针(对象包含公钥)。
换句话说,python 加密库似乎能够加密不带填充的可变长度明文,但 OPENSSL 要求明文是固定长度的。那么,python 加密库究竟在做什么来处理明文的可变大小,有什么方法可以在 OPENSSL 中复制它?
【问题讨论】:
标签: encryption openssl rsa public-key-encryption pycrypto