我的服务器用 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/