OpenSSL_AES加密库API功能

1、const char *AES_options(void);

AES算法状态,是全部支持或者是部分支持。返回值:“aes(full)” 或者"aes(partial)"

2、int AES_Set_Encrypt_Key(const unsigned char *userKey, const int bits, AES_KEY *key);

设定加密用的Key;
userKey: 密钥数值;
bits:密钥长度,以bit为单位,如果密钥数字是16个字节,则此参数值应为128;
key: AES_KEY对象指针;

返回值: 0 成功, -1 userkey,key为空, -2: 密钥长度不是128,192,256;

3、int AES_Set_Decrypt_Key(const unsigned char *userKey, const int bits, AES_KEY *key);

设定解密用的Key;
userKey: 密钥数值;
bits:密钥长度,以bit为单位,如果密钥数字是16个字节,则此参数值应为128;
key: AES_KEY对象指针;

返回值: 0 成功, -1 userkey,key为空, -2: 密钥长度不是128,192,256;

4、void AES_Encrypt(const unsigned char *in, unsigned char *out,const AES_KEY *key);

AES 加密,加密单个数据块,in,out可以是同一内存区;
in: 需要加密的数据;

是的,**OpenSSL** 提供了完整的 **AES(Advanced Encryption Standard)加密 API**,开发者可以方便地使用 AES 进行对称加密和解密操作。OpenSSLAES 实现支持多种工作模式,如 ECB、CBC、CFB、OFB、CTR 等。 --- ### OpenSSLAES 的主要 API 函数 以下是一些常用的 AES 加密/解密函数,定义在 `<openssl/aes.h>` 头文件中: ```c // 初始化密钥结构 void AES_set_encrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key); void AES_set_decrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key); // 加密单个16字节的块 void AES_encrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key); // 解密单个16字节的块 void AES_decrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key); ``` --- ### 示例:使用 OpenSSL 进行 AES-128-ECB 加密 ```c #include <openssl/aes.h> #include <string.h> #include <stdio.h> int main() { // 明文(必须是16字节的倍数) unsigned char plaintext[16] = "Hello, OpenSSL!"; // 密钥(AES-128) unsigned char key[16] = "0123456789abcdef"; // 加密后的密文 unsigned char ciphertext[16]; // 解密后的明文 unsigned char decryptedtext[16]; // 密钥结构体 AES_KEY key_schedule; // 设置加密密钥 AES_set_encrypt_key(key, 128, &key_schedule); // 加密 AES_encrypt(plaintext, ciphertext, &key_schedule); // 设置解密密钥 AES_set_decrypt_key(key, 128, &key_schedule); // 解密 AES_decrypt(ciphertext, decryptedtext, &key_schedule); printf("Decrypted: %s\n", decryptedtext); return 0; } ``` > ⚠️ 注意:上述示例使用的是 ECB 模式,它不是最安全的模式,建议使用 CBC、CTR 或 AEAD 模式如 GCM。 --- ### 更安全的 AES 使用模式(如 CBC) OpenSSL 提供了更高级的对称加密接口 `EVP_CIPHER`,可以更方便地使用 AES 的各种模式,例如 CBC、CTR、GCM 等。 #### 示例:AES-128-CBC 加密 ```c #include <openssl/evp.h> #include <string.h> #include <stdio.h> void handleErrors() { // 错误处理 } int 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())) handleErrors(); if(1 != EVP_EncryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv)) handleErrors(); if(1 != EVP_EncryptUpdate(ctx, ciphertext, &len, plaintext, plaintext_len)) handleErrors(); ciphertext_len = len; if(1 != EVP_EncryptFinal_ex(ctx, ciphertext + len, &len)) handleErrors(); ciphertext_len += len; EVP_CIPHER_CTX_free(ctx); return ciphertext_len; } ``` --- ### 支持的 AES 模式 OpenSSL 支持多种 AES 模式,常见的包括: | 模式 | 函数名 | 说明 | |------|--------|------| | ECB | `EVP_aes_128_ecb()` | 最基本的块加密模式,不推荐使用 | | CBC | `EVP_aes_128_cbc()` | 常用模式,需初始化向量 IV | | CFB | `EVP_aes_128_cfb()` | 流加密模式 | | OFB | `EVP_aes_128_ofb()` | 流加密模式 | | CTR | `EVP_aes_128_ctr()` | 并行化支持好 | | GCM | `EVP_aes_128_gcm()` | 支持认证加密(AEAD) | --- ### 编译命令示例(链接 OpenSSL) ```bash gcc aes_example.c -o aes_example -lssl -lcrypto ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

键盘独行侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值