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

嗨,我已经在我的linux机器上安装了openssl,并通过了头文件和文档(这是非常不充分的:()。

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

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

但是在谷歌搜索时,我遇到了一些有关此问题的教程,这些教程使用“

evp.h”功能执行此操作http://saju.net.in/code/misc/openssl_aes.c.txt

是否有特定原因,或者直接访问aes.h函数更好。

非常感谢

PS如果我天真,请原谅我

回答:

使用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的最重要的文档之一是Viega / Messier / Chandra撰写的Network Security with

OpenSSL。它是从2002年(0.9.7)起发布的,因此不涉及最近10年内对OpenSSL的更改,但是与仅使用手册页相比,IMO仍然是学习OpenSSL的一种更轻松的方法。

以上是 使用EVP与算法API进行对称加密的OpenSSL 的全部内容, 来源链接: utcz.com/qa/420384.html

回到顶部