EVP_EncryptInit_ex怎么用
时间: 2024-02-01 16:03:58 浏览: 149
EVP_EncryptInit_ex函数是OpenSSL库中用于对称加密的初始化函数之一。以下是使用EVP_EncryptInit_ex的一个简单例子:
```c
#include <openssl/evp.h>
int main() {
// 初始化加密上下文
EVP_CIPHER_CTX *ctx;
ctx = EVP_CIPHER_CTX_new();
EVP_CIPHER_CTX_init(ctx);
// 设置加密算法和密钥
unsigned char key[] = "0123456789abcdef";
unsigned char iv[] = "1234567890abcdef";
EVP_EncryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv);
// 待加密的明文
unsigned char plaintext[] = "hello, world!";
int plaintext_len = strlen(plaintext);
// 计算加密后的密文长度
int ciphertext_len = plaintext_len + EVP_CIPHER_CTX_block_size(ctx);
unsigned char ciphertext[ciphertext_len];
// 加密明文
int len;
EVP_EncryptUpdate(ctx, ciphertext, &len, plaintext, plaintext_len);
int ciphertext_len2 = len;
// 结束加密过程
EVP_EncryptFinal_ex(ctx, ciphertext + len, &len);
ciphertext_len2 += len;
// 输出加密结果
printf("Ciphertext:\n");
for (int i = 0; i < ciphertext_len2; i++) {
printf("%02x", ciphertext[i]);
}
printf("\n");
// 清理加密上下文
EVP_CIPHER_CTX_cleanup(ctx);
EVP_CIPHER_CTX_free(ctx);
return 0;
}
```
在这个例子中,我们使用了EVP_aes_128_cbc()算法来加密明文,key和iv数组分别代表密钥和初始化向量。在加密过程中,我们先计算出密文的长度,然后使用EVP_EncryptUpdate函数进行加密,最后使用EVP_EncryptFinal_ex函数结束加密过程。
阅读全文