使用RSA_set0_key(key,n,e,d)时RSA_public_decrypt失败?

时间:2017-07-07 09:26:33

标签: encryption openssl cryptography rsa private-key

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

我将RSA_set0_key用于私钥(ned)设置,RSA_private_encrypt正常,但RSA_public_decrypt失败总是。我想知道它为什么会失败。

为什么RSA_public_decrypt会失败?

2 个答案:

答案 0 :(得分:2)

  

RSA_set0_key()可以使用N,E,D吗?

是。 OpenSSL手册页中记录了RSA_set0_key。它的签名是:

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。在后续调用中,这些值中的任何一个都可以是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_public_decrypt时会发生什么。也许您可以添加一些代码,说明返回值是什么,并在函数失败时声明ERR_get_err的值。

与此同时,您可能需要RSA对象拥有扩展的私钥参数,例如pqdpdq和{{1 }}。这些是中国剩余定理(CRT)参数,它们设置为RSA_set0_crt_params。另请参阅OpenSSL用户邮件列表中的Unable to decrypt without Chinese Remainder Theorem factors?

答案 1 :(得分:0)

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