我在Linux下用C开发了一个随机数发送到远程pc,然后远程pc读取数字并使用openssl私钥(使用C# windows应用程序)对其进行加密,然后发送,c程序尝试解密它其 openssl 公钥如下:
int padding = RSA_PKCS1_PADDING;
RSA_public_decrypt(data_len,enc_data,decrypted,rsa,padding);
c#program 是这样开发的:
CryptoKey d = CryptoKey.FromPrivateKey(privateKeyAsPem, null);
RSA rsa = d.GetRSA();
byte[] result = rsa.PrivateEncrypt(code, RSA.Padding.PKCS1);
rsa.Dispose();
问题是我有一个随机行为,有时 C 程序解密没有错误,有时我得到以下错误:
error:04067072:rsa routines:RSA_EAY_PUBLIC_DECRYPT:padding check failed
如何解决这个问题?
笔记:
在 Linux 下生成密钥是这样的:
openssl genpkey -algorithm RSA -out priv.pem -pkeyopt rsa_keygen_bits:2048
openssl rsa -pubout -in priv.pem -out pub.pem