我使用Openssl库为我的应用程序提供RSA加密解密。这就是我发现的:
int RSA_private_decrypt(int flen, unsigned char *from,
unsigned char *to, RSA *rsa, int padding);
RSA_private_decrypt()使用私钥 rsa 从解密 flen 个字节,并将 flen 字节存储在 。(来自文档https://www.openssl.org/docs/man1.1.1/man3/RSA_private_decrypt.html)
要设置RSA结构,请使用以下方法:
int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d);
n , e 和 d 参数值可以通过调用RSA_set0_key()并为< strong> n , e 和 d 作为函数的参数。第一次在给定的RSA对象上调用此函数时,值 n 和 e 必须为非NULL。值 d 可以为NULL。(来自文档https://www.openssl.org/docs/man1.1.1/man3/RSA_set0_key.html)
因此,当我如上所述将上面的内容用于解密时,一切正常。我用RSA
,n
和e
设置了d
结构,然后使用其他参数将RSA
结构传递给private_decrypt()
并得到正确的结果。 / p>
但是,如果我不将e
设置为RSA
结构(或将其设置为随机值以避免非null约束),则private_decrypt()
返回错误解密结果(通常为全零)。
那么,为什么解密需要e?就RSA算法而言,具有n,d和cipher_text足以提供正确的结果就足够了吗?