【发布时间】:2020-08-28 20:22:45
【问题描述】:
我正在使用 OAEP SHA256 实施 RSA 加密。 按照 stackoverflow 和 openssl 文档的示例, 我实现了下面的代码。但是我找不到 EVP_PKEY_size 和 EVP_PKEY_CTX_new() 失败的原因。
谁能指出错误?或者任何人都可以提供可以进行 SHA256 rsa 公钥加密的代码吗?
keybio = BIO_new(BIO_s_mem());
if (keybio == NULL)
{
printf("Failed to create key BIO");
return 0;
}
int len = BIO_write(keybio, Key, strlen(Key));
EVP_PKEY* evppubKey = PEM_read_bio_PUBKEY(keybio, NULL, NULL, NULL);
// EVP_PKEY* evp_key = PEM_read_bio_RSAPublicKey(keybio, NULL, NULL, NULL);
int a = EVP_PKEY_size(evp_key);
EVP_PKEY_CTX* ctx = EVP_PKEY_CTX_new(evp_key, eng);
EVP_PKEY_free(evp_key);
if (ctx)
{
if (EVP_PKEY_encrypt_init(ctx) > 0)
{
EVP_PKEY_CTX_ctrl_str(ctx, "rsa_padding_mode", "oaep");
EVP_PKEY_CTX_ctrl_str(ctx, "rsa_oaep_md", "sha256");
EVP_PKEY_CTX_ctrl_str(ctx, "rsa_mgf1_md", "sha256");
if (EVP_PKEY_encrypt(ctx, NULL, &outlen, data, data_len) <= 0)
{
return -1;
}
outdata = OPENSSL_malloc(outlen);
if (!outdata) {
return -1;
}
if (EVP_PKEY_encrypt(ctx, outdata, &outlen, data, data_len) <= 0) {
return -1;
}
}
EVP_PKEY_CTX_free(ctx);
}
更新: 我对代码进行了更改。 PEM_read_bio_PUBKEY() 返回 NULL。 我的公众以 -----BEGIN RSA PUBLIC KEY----- 我不确定 PEM_read_bio_PUBKEY() 是否是正确的阅读方法。
【问题讨论】: