gpt4 book ai didi

c - OpenSSL 使用 EVP 与算法 API 进行对称加密

转载 作者:太空狗 更新时间:2023-10-29 23:17:24 24 4
gpt4 key购买 nike

您好,我已经在我的 Linux 机器上安装了 openssl 并浏览了头文件和文档(这是非常不够的 :( )。

我正在尝试构建一个使用对称加密算法的项目(在“c”中)(我专注于 aes256cbc)。问题是我对如何在我的代码中使用库函数感到困惑。

对于我的 aes256cbc 实现,我可以直接使用“aes.h”头文件(首先出现在我面前)中定义的函数。

但是在谷歌搜索中,我遇到了一些使用“evp.h”函数来执行此操作的教程 http://saju.net.in/code/misc/openssl_aes.c.txt

这是有特定原因还是直接访问 aes.h 函数更好。

此外,如果有人可以向我指出有关使用 openssl 加密库的任何类型的良好文档/教程,我们将不胜感激。

非常感谢

P.S 如果我太天真了请原谅我

最佳答案

使用 EVP API 的优势在于,您可以以通用方式对 OpenSSL 支持的所有对称密码使用相同的 API。这使得替换所使用的算法变得更加容易,或者使算法在以后阶段可由用户配置。您编写的大部分代码并不特定于您选择的加密算法。

这是一个在 CBC 模式下使用 AES-256 加密的简单示例:

#include <stdio.h>
#include <openssl/evp.h>

int main()
{
EVP_CIPHER_CTX ctx;
unsigned char key[32] = {0};
unsigned char iv[16] = {0};
unsigned char in[16] = {0};
unsigned char out[32]; /* at least one block longer than in[] */
int outlen1, outlen2;

EVP_EncryptInit(&ctx, EVP_aes_256_cbc(), key, iv);
EVP_EncryptUpdate(&ctx, out, &outlen1, in, sizeof(in));
EVP_EncryptFinal(&ctx, out + outlen1, &outlen2);

printf("ciphertext length: %d\n", outlen1 + outlen2);

return 0;
}

为简单起见,我省略了错误处理。

IMO 关于 OpenSSL 的最重要文档之一是 Network Security with OpenSSL by Viega/Messier/Chandra .它是从 2002 年 (0.9.7) 开始的,因此不包括过去 10 年对 OpenSSL 的更改,但在我看来,与仅使用手册页相比,它仍然是一种学习 OpenSSL 的痛苦方式。

关于c - OpenSSL 使用 EVP 与算法 API 进行对称加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18261740/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com