使用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]; 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: %dn", outlen1 + outlen2); return 0;}为简单起见,我省略了错误处理。
IMO关于OpenSSL的最重要的文档之一是Viega / Messier / Chandra撰写的Network Security with
OpenSSL。它是从2002年(0.9.7)起发布的,因此不涉及最近10年内对OpenSSL的更改,但是与仅使用手册页相比,IMO仍然是学习OpenSSL的一种更轻松的方法。



