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代表解密;