Encryption 使用RSA_set0_密钥(密钥,n,e,d)时,RSA_public_解密失败?

Encryption 使用RSA_set0_密钥(密钥,n,e,d)时,RSA_public_解密失败?,encryption,openssl,cryptography,rsa,private-key,Encryption,Openssl,Cryptography,Rsa,Private Key,我有来自其他设备的n,e,d组件,而不是OpenSSL。我想使用OpenSSL API进行加密和解密。但加密后解密总是失败 我对私钥(n,e,d)使用RSA\u set0\u key)设置,并且RSA\u private\u encrypt可以,但是RSA\u public\u decrypt总是失败。我想知道为什么它失败了 为什么RSA\u public\u解密失败 RSA_set0_key()是否可以使用N,E,D 对。在OpenSSL手册页中记录。其签名为: int RSA_set0_ke

我有来自其他设备的
n
e
d
组件,而不是OpenSSL。我想使用OpenSSL API进行加密和解密。但加密后解密总是失败

我对私钥(
n
e
d
)使用
RSA\u set0\u key
)设置,并且
RSA\u private\u encrypt
可以,但是
RSA\u public\u decrypt
总是失败。我想知道为什么它失败了

为什么
RSA\u public\u解密失败

RSA_set0_key()是否可以使用N,E,D

对。在OpenSSL手册页中记录。其签名为:

int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d);
说明如下:

可以通过调用RSA_set0_key()并将n、e和d的新值作为参数传递给函数来设置n、e和d参数值。第一次对给定RSA对象调用此函数时,值n和e必须为非NULL。值d可以为空。在后续调用中,这些值中的任何一个都可能为NULL,这意味着相应的RSA字段保持不变。调用此函数将值的内存管理转移到RSA对象,因此调用此函数后,调用方不应释放传入的值

再往下,在返回值下:

RSA_set0_key()、RSA_set0_factors和RSA_set0_crt_params()在成功时返回1,在失败时返回0


我使用RSA_set0_key进行密钥(N,E,D)设置,RSA_private_encrypt可以,但是RSA_public_decrypt总是失败

很难说您使用RSA\u public\u decrypt的情况。也许您可以添加一些代码,说明返回值是什么,并在函数失败时说明
ERR\u get\u ERR
的值


同时,您可能需要RSA对象具有扩展私钥参数,如
p
q
dp
dq
,以及
qInv
。这些是中国剩余定理(CRT)参数,它们是用。另请参见OpenSSL用户邮件列表。

我找到了原因。在使用OS2IP反转键(n,d)的顺序后,它可以工作。谢谢你的帮助

怎么会失败?你的密码在哪里?错误消息在哪里?注意“私有加密”和“公共解密”实际上是签名而不是加密,并且(如文件所述)不是标准的;这些名字是上世纪90年代遗留下来的误导性历史遗迹。也就是说,它在1.1.0中对我有效,而明显的变量设置n,e,d直接在1.0.2 1.0.1 1.0.0和0.9.8中有效。mcve?OpenSSL只需d就可以执行RSA私钥操作,但效率较低。您链接的邮件清楚地解释了问题在于读取非CRT键(来自PEM),而不是使用内存中正确的键。