【发布时间】:2014-04-19 09:00:07
【问题描述】:
我在 python 中编写了服务器,在 C 中编写了客户端。他们的工作是从服务器向客户端发送一条使用RSA private key 加密的秘密消息。我正在使用 openssl/rsa.h 库,即我使用私钥初始化 rsa 对象并使用 RSA_public_encrypt(length_of_message, "Secret Message", to, rsa, RSA_PKCS1_PADDING) 加密消息。然后我将此加密消息发送到python 服务器并尝试使用from Crypto.PublicKey import RSA 库用相同的私钥解密它。问题是它没有正确解密它。它总是输出 128 位长度的消息,其中秘密消息随机放置在其中 (e.g. '\x23\xa3x\43...Secret Message\xef\x4a'),它通常应该只返回 Secret Message。
【问题讨论】:
-
“用使用相同的私钥解密它”——最好是一个错字。
-
要在 RSA 方案中加密,您应该使用公钥...
-
我正在使用
RSA_public_encrypt(length_of_message, "Secret Message", to, rsa, RSA_PKCS1_PADDING)加密公共。当我从私钥生成公钥并使用它时,函数会出错。 -
我认为它与标准填充选项有关,但我还不能解决它。当我使用
rsautl -encrypt -in msg.file -inkey tvfp.pem -out out.bin加密并使用openssl rsautl -decrypt -in out.bin -inkey tvfp.pem解密时,它可以正常工作。但是,当我在解密时添加-raw选项进行填充时,它会打印出与 python 解密器类似的结果。