openssl aes加密例子

Posted Linux编程学堂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了openssl aes加密例子相关的知识,希望对你有一定的参考价值。

openssl

OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。

首先,要安装 openssl:

centos命令:

sudo yum install openssl-devel

ubuntu命令:

sudo apt-get install libssl-dev

 

 

AES算

编译:

#! /bin/sh

out=exe

rm $out

gcc test.c -o $out -lcrypto

运行:

[hill@Ubunut10 aes]$./make.sh 
[hill@Ubunut10 aes]$./exe 
AES_BLOCK_SIZE = 16
原始数据:
232340402121214142433132330000000000000000000000000000000000000000000000000000000000000000000000
set aes key = 0123456789abcde
加密数据:
1f84ced9ca24eafed2cf4709b2324578b7a085b9b36333a3a667929584c40c1bb7a085b9b36333a3a667929584c40c1b
揭密数据:
232340402121214142433132330000000000000000000000000000000000000000000000000000000000000000000000
uncode aes = ##@@!!!ABC123
[hill@Ubunut10 aes]$
 

法ECB模式

1、使用函数AES_set_encrypt_key设置加密密钥。

函数原型:

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;

2、使用函数AES_set_decrypt_key设置解密密钥。

函数原型:

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;

3、使用函数AES_ecb_encrypt对数据进行加解密

函数原型:

void AES_ecb_encrypt(const unsigned char *in, unsigned char *out,    const AES_KEY *key, const int enc);

函数说明:

AES加密/解密单个数据块(16个字节),ECB模式

参数说明:

in: 需要加密/解密的数据;

out: 计算后输出的数据;

key:密钥

enc: AES_ENCRYPT 代表加密, AES_DECRYPT代表解密;

AES算法CBC模式

1、使用函数AES_set_encrypt_key设置加密密钥。

函数原型:

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;

2、使用函数AES_set_decrypt_key设置解密密钥。

函数原型:

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;

3、使用函数AES_cbc_encrypt对数据进行加解密

函数原型:

void AES_cbc_encrypt(const unsigned char *in, unsigned char *out,   size_t length, const AES_KEY *key,    unsigned char *ivec, const int enc);

函数作用:

AES加密/解密单个数据块(16个字节),CBC模式

参数说明:

in: 需要加密/解密的数据;

out: 计算后输出的数据;

length: 数据长度(这里不包含初始向量数据长度)

key:密钥

ivec: 初始向量(一般为16字节全0)

enc: AES_ENCRYPT 代表加密, AES_DECRYPT代表解密;

以上是关于openssl aes加密例子的主要内容,如果未能解决你的问题,请参考以下文章

利用openSSL库AES模块加密

如何在 Openssl 中使用 AES 进行加密

mbedtls 和 openssl 之间的不同 AES-256 加密输出

PHP中的AES加密以在openssl中解密

openSSL实现AES加密

关于openssl AES/ECB/PKCS5Padding加密 求助