encryption - 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 的新值作为参数传递给函数来设置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()
但是,如果我没有设置e
为RSA
struct (或将其设置为随机值以避免非空约束),则private_decrypt()
返回错误的解密结果(通常全为零)。
那么,为什么私人解密需要 e 呢?就 RSA 算法的工作而言,拥有 n、d 和 cipher_text 就足以提供正确的结果,不是吗?
解决方案
推荐阅读
- redis - Redis 复制顺序
- python - pycharm 和 tensorflow-gpu;未找到 DLL
- mysql - “错误代码:2014。命令不同步;您现在无法运行此命令”同时创建触发器
- javascript - 如何将请求的 URL 与自定义 URL 字符串进行比较和验证?
- mysql - 向 mysql json_arrayagg 函数添加条件
- ruby-on-rails - Rails 5.2 无法在生产环境中加载
- python - NameError:名称“train_gen”未定义
- reactjs - 使用带有 react-select v2 的搜索图标
- mysql - HasManyThrough 雄辩的关系,Laravel 5.6、5.7
- python - 如何在 python3.* 中删除对象