在当今信息安全日益重要的时代,掌握基本的加密解密技术是每个C语言开发者必备的技能。本文将带你从零开始,使用广泛使用的 C语言加密解密库 —— OpenSSL,实现常见的对称加密算法如 AES 和 DES。无论你是编程小白还是有一定基础的开发者,都能轻松上手!
OpenSSL 是一个开源的 C语言加密解密库,提供了丰富的加密、解密、证书管理等功能。它支持多种加密算法,包括 AES、DES、RSA 等,被广泛应用于 HTTPS、SSH、电子邮件安全等领域。
在 Linux 或 macOS 上,通常可以通过包管理器安装:
# Ubuntu/Debiansudo apt-get install libssl-dev# macOS (使用 Homebrew)brew install openssl
Windows 用户可下载预编译的 OpenSSL 库或使用 MSYS2 环境。
AES(高级加密标准)是目前最常用的对称加密算法之一。下面是一个完整的 C 语言示例,演示如何使用 OpenSSL 实现 AES 加密和解密。
#include <stdio.h>#include <string.h>#include <openssl/aes.h>#include <openssl/evp.h>// AES-128-CBC 加密函数int aes_encrypt(unsigned char *plaintext, int plaintext_len, unsigned char *key, unsigned char *iv, unsigned char *ciphertext) { EVP_CIPHER_CTX *ctx; int len; int ciphertext_len; if (!(ctx = EVP_CIPHER_CTX_new())) return -1; if (1 != EVP_EncryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv)) return -1; if (1 != EVP_EncryptUpdate(ctx, ciphertext, &len, plaintext, plaintext_len)) return -1; ciphertext_len = len; if (1 != EVP_EncryptFinal_ex(ctx, ciphertext + len, &len)) return -1; ciphertext_len += len; EVP_CIPHER_CTX_free(ctx); return ciphertext_len;}// AES-128-CBC 解密函数int aes_decrypt(unsigned char *ciphertext, int ciphertext_len, unsigned char *key, unsigned char *iv, unsigned char *plaintext) { EVP_CIPHER_CTX *ctx; int len; int plaintext_len; if (!(ctx = EVP_CIPHER_CTX_new())) return -1; if (1 != EVP_DecryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv)) return -1; if (1 != EVP_DecryptUpdate(ctx, plaintext, &len, ciphertext, ciphertext_len)) return -1; plaintext_len = len; if (1 != EVP_DecryptFinal_ex(ctx, plaintext + len, &len)) return -1; plaintext_len += len; EVP_CIPHER_CTX_free(ctx); return plaintext_len;}int main() { unsigned char key[] = "0123456789abcdef"; // 16字节密钥 unsigned char iv[] = "abcdefghijklmnop"; // 16字节初始向量 unsigned char *plaintext = (unsigned char *)"Hello, this is a secret message!"; unsigned char ciphertext[128]; unsigned char decryptedtext[128]; int ciphertext_len = aes_encrypt(plaintext, strlen((char *)plaintext), key, iv, ciphertext); printf("加密后数据长度: %d\n", ciphertext_len); int decrypted_len = aes_decrypt(ciphertext, ciphertext_len, key, iv, decryptedtext); decryptedtext[decrypted_len] = '\0'; printf("解密结果: %s\n", decryptedtext); return 0;} 编译命令(需链接 OpenSSL 库):
gcc -o aes_example aes_example.c -lssl -lcrypto
DES 是一种较老的对称加密算法,由于密钥长度短(56位),已不再安全,但作为学习目的仍有价值。以下是简单的 DES 加密示例:
#include <stdio.h>#include <string.h>#include <openssl/des.h>int main() { DES_cblock key = {0x13, 0x34, 0x57, 0x79, 0x9B, 0xBC, 0xDF, 0xF1}; DES_cblock input = {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}; DES_cblock output; DES_key_schedule schedule; DES_set_key_unchecked(&key, &schedule); DES_ecb_encrypt(&input, &output, &schedule, DES_ENCRYPT); printf("DES加密结果: "); for (int i = 0; i < 8; i++) printf("%02x", output[i]); printf("\n"); return 0;} 注意:DES 已被 AES 取代,实际项目中应优先使用 C语言AES加密 方案。
通过本教程,你已经掌握了如何在 C 语言中使用 OpenSSL 库进行基本的加密解密操作。无论是 C语言AES加密 还是了解 C语言DES加密 的原理,都是构建安全应用的重要一步。希望这篇 OpenSSL C语言教程 能为你打下坚实的基础!
提示:实际开发中,请务必遵循安全编码规范,并参考 OpenSSL 官方文档获取最新 API 信息。
本文由主机测评网于2025-12-15发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/2025127898.html