EVP_PKEY_new(); EVP_PKEY_set1_RSA(key, r);
时间: 2024-10-08 10:18:58 浏览: 29
`EVP_PKEY_new()` 是 OpenSSL 库中的一个函数,它用于创建一个新的密钥对结构 (EVP_PKEY)。这个结构体包含了多种加密算法的密钥信息,如公钥、私钥等。当你需要初始化一个新密钥对象时,通常会使用这个函数。
`EVP_PKEY_set1_RSA(key, r)` 这一行则是用来设置 `key` 中的密钥为 RSA 类型,并将给定的 RSA 公钥或私钥数据 `r` 赋值给它。`key` 是一个指向 `EVP_PKEY` 结构的指针,`r` 是一个 RSA 密钥的结构实例,可能是由其他函数生成的 RSA 公钥或私钥。
举个例子,如果你已经有一个 RSA 密钥对,你可以这样做:
```c
RSA *rsa_key = RSA_generate_key(2048, /* bits */, NULL, NULL);
EVP_PKEY *pkey = EVP_PKEY_new();
EVP_PKEY_set1_RSA(pkey, rsa_key);
```
这里首先生成了一个 2048 位的 RSA 密钥,然后通过 `EVP_PKEY_set1_RSA` 函数将其绑定到 `pkey` 上。
相关问题
EVP_PKEY_CTX_set_rsa_mgf1_md函数
EVP_PKEY_CTX_set_rsa_mgf1_md 函数是 OpenSSL 库中用于设置 RSA OAEP 填充模式中使用的 MGF1 哈希函数的函数。该函数需要传入一个 EVP_PKEY_CTX 结构体指针和一个 EVP_MD 结构体指针作为参数,用于设置 OAEP 填充模式中使用的 MGF1 哈希函数。其中,EVP_MD 结构体可以通过 EVP_get_digestbyname 函数获取。
具体用法如下:
```c
int EVP_PKEY_CTX_set_rsa_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD *md);
```
其中,ctx 表示一个 EVP_PKEY_CTX 结构体指针,表示要设置的 RSA OAEP 填充模式的上下文;md 表示一个 EVP_MD 结构体指针,表示要设置的 MGF1 哈希函数。
该函数的返回值为 int 类型,表示设置是否成功。如果设置成功,则返回 1,否则返回 0。
需要注意的是,EVP_PKEY_CTX_set_rsa_mgf1_md 函数只能用于 RSA OAEP 填充模式中使用的 MGF1 哈希函数的设置,如果要设置 RSA PKCS#1 v1.5 填充模式中使用的 MGF1 哈希函数,则需要使用 EVP_PKEY_CTX_set_rsa_pss_mgf1_md 函数。
EVP_PKEY_CTX_set_rsa_oaep_md函数
EVP_PKEY_CTX_set_rsa_oaep_md 函数是 OpenSSL 库中用于设置 RSA OAEP 填充模式中使用的哈希函数的函数。该函数需要传入一个 EVP_PKEY_CTX 结构体指针和一个 EVP_MD 结构体指针作为参数,用于设置 OAEP 填充模式中使用的哈希函数。其中,EVP_MD 结构体可以通过 EVP_get_digestbyname 函数获取。
具体用法如下:
```c
int EVP_PKEY_CTX_set_rsa_oaep_md(EVP_PKEY_CTX *ctx, const EVP_MD *md);
```
其中,ctx 表示一个 EVP_PKEY_CTX 结构体指针,表示要设置的 RSA OAEP 填充模式的上下文;md 表示一个 EVP_MD 结构体指针,表示要设置的哈希函数。
该函数的返回值为 int 类型,表示设置是否成功。如果设置成功,则返回 1,否则返回 0。
需要注意的是,EVP_PKEY_CTX_set_rsa_oaep_md 函数只能用于 RSA OAEP 填充模式中使用的哈希函数的设置,如果要设置 RSA PKCS#1 v1.5 填充模式中使用的哈希函数,则需要使用 EVP_PKEY_CTX_set_signature_md 函数。