python - C和python之间的RSA加密/解密

标签 python c openssl rsa

我的服务器用 python 编写,客户端用 C 编写。他们的工作是从服务器向客户端发送一条 secret 消息,该消息使用 RSA 私钥 加密。我正在使用 openssl/rsa.h 库,也就是说,我使用私钥初始化一个 rsa 对象,并使用 RSA_public_encrypt(length_of_message, "Secret Message ", 到, rsa, RSA_PKCS1_PADDING) 。然后我将此加密消息发送到 python 服务器并尝试使用 from Crypto.PublicKey import RSA用相同的私钥对其解密。问题是它没有正确解密。它总是输出 128 位长度的消息,其中 secret 消息被随机放置在其中 (例如 '\x23\xa3x\43...Secret Message\xef\x4a'),它通常应该在其中返回只是 Secret Message

最佳答案

问题出在填充上。 Python 的 rsa 模块使用 PKCS1 填充解密结果并且不删除填充。使用以下我从 here 中获取的功能问题已解决:

def pkcs1_unpad(text):
if len(text) > 0 and text[0] == '\x02':
    # Find end of padding marked by nul
    pos = text.find('\x00')
    if pos > 0:
        return text[pos+1:]
return None

关于python - C和python之间的RSA加密/解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22398745/

相关文章:

c - 如何存储单个字符的缓冲区并将它们作为字符串打印出来?

c - OpenSSL 非阻塞套接字 SSL_read() 不可预测

c - 使用 gdb 调试 Linux 内核模块

c - 32 位与 64 位架构上的内存访问

c++ - gSOAP - 如何使用 SSL 和自签名证书

openssl - 将 RSA 公钥转换为 RSA DER

python - 从 Google Map Mobile 3.0 的 MyLocation 功能中检索纬度/经度

python - Virtualenv 在 OS X Yosemite 上失败并出现 OSError

python - 使用Python子进程执行shell命令

python - 使用 Python 将名称拆分为名字、中间名和姓氏