我有一套现有的Python代码,它使用原始(教科书) RSA加密机制来加密小数据。具体来说,python代码将公钥加载到变量publickey中,然后使用以下代码加密此数据:
ciphertext = publickey.encrypt(plaintext,None)是的,我读过免责声明:“此函数执行朴素的原始RSA加密(教科书)。在实际应用中,您总是需要使用适当的加密填充,.”不幸的是,我现在无法更改这段代码,所以我不得不使用这个“教科书”加密命令。
请注意,即使此命令不使用任何填充方案,它似乎仍然能够加密任何(适当小)数量的明文。换句话说,明文可以是任意长度,但不超过RSA规定的任何限制。
但是,现在我想使用IOS应用程序中的OPENSSL库进行相同的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中复制它呢?
发布于 2013-12-05 03:31:05
如果您查看填充物的文档,它们会解释:
此模式只应用于在应用程序代码中实现加密声音填充模式。直接用RSA加密用户数据是不安全的。
换句话说,RSA_NO_PADDING适用于您自己处理填充的情况,因此OpenSSL需要适当大小的输入。这并不意味着“教科书RSA”。
您不能更改python代码有一个令人信服的原因吗?教科书RSA是不安全的,你使用它会冒很大的风险。
https://stackoverflow.com/questions/20390762
复制相似问题