您好我已经在我的Linux机器上安装openssl,并通过头文件和文件(这是非常insufficint :()。
我正在尝试构build一个使用对称encryptionalgorithm的项目(在'c')(我专注于aes256cbc)。 问题是我很困惑,因为在我的代码中如何使用库函数。
对于我的aes256cbc的实现,我可以直接使用'aes.h'头文件中定义的函数(首先在我看来)。
但在谷歌search我来到一些教程这是使用'evp.h'函数来做到这一点http://saju.net.in/code/misc/openssl_aes.c.txt
有没有一个特定的原因,或直接访问aes.h函数是更好的。
而且如果有人能指点我一个很好的文档/教程的任何一种使用openssl的encryption库将不胜感激。
非常感谢
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的 OpenSSL 网络安全 。 它是从2002年(0.9.7)开始的,所以不包括过去10年来OpenSSL的变化,但是与仅使用手册页相比,IMO仍然是学习OpenSSL的一种不那么痛苦的方式。
目前,OpenSSL wiki在如何使用EVP系列功能方面有很好的文档: http : //wiki.openssl.org/index.php/EVP
使用EVP over算法API的另一个好处是EVP将自动使用硬件加速(如AES-NI指令集)(如果可用)。 使用算法API,您需要手动启用它。