首页 > 解决方案 > Openssl,RSA:为什么 private_decrypt 需要公钥?

问题描述

我使用 Openssl 库为我的应用程序提供 RSA 加密解密。这就是我发现的:

 int RSA_private_decrypt(int flen, unsigned char *from,
                         unsigned char *to, RSA *rsa, int padding);

RSA_private_decrypt()使用私钥rsa解密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);

可以通过调用 RSA_set0_key() 并将 n 、 e 和 d 的新值作为参数传递函数设置ned参数值。第一次在给定的 RSA 对象上调用此函数时,值ne必须为非 NULL。值d可能为 NULL。 (来自文档,https://www.openssl.org/docs/man1.1.1/man3/RSA_set0_key.html

因此,当我使用上述内容进行解密时,一切正常。我用,和设置RSA结构,然后用其他参数将结构传递给并得到正确的结果。nedRSAprivate_decrypt()

但是,如果我没有设置eRSAstruct (或将其设置为随机值以避免非空约束),则private_decrypt()返回错误的解密结果(通常全为零)。

那么,为什么私人解密需要 e 呢?就 RSA 算法的工作而言,拥有 n、d 和 cipher_text 就足以提供正确的结果,不是吗?

标签: encryptionopensslrsa

解决方案


推荐阅读