我在Linux下开发了一个随机数发送到远程电脑,然后远程电脑读取数字并用openssl私钥加密(用C#windows应用程序),之后发送,c程序尝试使用openssl公钥解密它,如下所示:
int padding = RSA_PKCS1_PADDING;
RSA_public_decrypt(data_len,enc_data,decrypted,rsa,padding);
c#程序是这样开发的:
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