OpenSSL提供了AES加解密算法的API
const char *AES_options(void);
AES算法状态,是全部支持或者是部分支持。
返回值:“aes(full)” 或者"aes(partial)"
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;
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;
void AES_encrypt(const unsigned char *in, unsigned char *out,const AES_KEY *key);
AES 加密,加密单个数据块,in,out可以是同一内存区;
in: 需要加密的数据;
out: 加密后的数据;
key:AES 密钥;
void AES_decrypt(const unsigned char *in, unsigned char *out,const AES_KEY *key);
AES 解密,解密单个数据块,in,out可以是同一内存区;
in: 需要解密的数据;
out: 解密后的数据;
key:AES 密钥;
void AES_ecb_encrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key, const int enc);
AES加密/解密单个数据块,ECB模式
in: 需要加密/解密的数据;
out: 计算后输出的数据;
key:密钥
enc: AES_ENCRYPT 代表加密, AES_DECRYPT代表解密;
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加密/解密单个数据块,CBC模式
in: 需要加密/解密的数据;
out: 计算后输出的数据;
length: 数据长度
key:密钥
ivec: 初始向量
enc: AES_ENCRYPT 代表加密, AES_DECRYPT代表解密;
void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out,
size_t length, const AES_KEY *key,
unsigned char *ivec, int *num, const int enc);
AES CFB128位模式加密/解密,输入输出数据区可以重叠;
in: 需要加密/解密的数据;
out: 计算后输出的数据;
length: 数据长度;
key: 密钥;
ivec: 初始化向量
num: 输出参数,计算状态,多少个CFB数据块
enc: 计算模式, 加密: AES_ENCRYPT , 解密: AES_DECRYPT
void AES_cfb1_encrypt(const unsigned char *in, unsigned char *out,
size_t length, const AES_KEY *key,
unsigned char *ivec, int *num, const int enc);
AES CFB1位模式加密/解密,输入输出数据区可以重叠;
in: 需要加密/解密的数据;
out: 计算后输出的数据;
length: 数据长度;
key: 密钥;
ivec: 初始化向量
num: 输出参数,计算状态,多少个CFB数据块
enc: 计算模式, 加密: AES_ENCRYPT , 解密: AES_DECRYPT
void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out,
size_t length, const AES_KEY *key,
unsigned char *ivec, int *num, const int enc);
AES CFB8位模式加密/解密,输入输出数据区可以重叠;
in: 需要加密/解密的数据;
out: 计算后输出的数据;
length: 数据长度;
key: 密钥;
ivec: 初始化向量
num: 输出参数,计算状态,多少个CFB数据块
enc: 计算模式, 加密: AES_ENCRYPT , 解密: AES_DECRYPT
void AES_ofb128_encrypt(const unsigned char *in, unsigned char *out,
size_t length, const AES_KEY *key,
unsigned char *ivec, int *num);
AES OFB128位模式加密/解密,输入输出数据区可以重叠;
in: 需要加密/解密的数据;
out: 计算后输出的数据;
length: 数据长度;
key: 密钥;
ivec: 初始化向量
num: 输出参数,计算状态,多少个CFB数据块
enc: 计算模式, 加密: AES_ENCRYPT , 解密: AES_DECRYPT
void AES_ctr128_encrypt(const unsigned char *in, unsigned char *out,
size_t length, const AES_KEY *key,
unsigned char ivec[AES_BLOCK_SIZE],
unsigned char ecount_buf[AES_BLOCK_SIZE],
unsigned int *num);
AES CTR128位模式加密/解密,输入输出数据区可以重叠;
in: 需要加密/解密的数据;
out: 计算后输出的数据;
length: 数据长度;
key: 密钥;
ivec: 初始化向量
ecount_buf: 输出参加,加密的次数,在第一次调用此函数时,需要初始化为0
num: 输出参数,计算状态,多少个CFB数据块,在第一次调用此函数时,需要初始化为0
enc: 计算模式, 加密: AES_ENCRYPT , 解密: AES_DECRYPT
void AES_ige_encrypt(const unsigned char *in, unsigned char *out,
size_t length, const AES_KEY *key,
unsigned char *ivec, const int enc);
AES 加密/解密,输入输出数据区可以重叠,初始化向量是加密数据块的2倍,加密前用前半部分做一次异或,加密后用后半部分做一次异或;
in: 需要加密/解密的数据;
out: 计算后输出的数据;
length: 数据长度;
key: 密钥;
ivec: 初始化向量
enc: 计算模式, 加密: AES_ENCRYPT , 解密: AES_DECRYPT
void AES_bi_ige_encrypt(const unsigned char *in, unsigned char *out,
size_t length, const AES_KEY *key,
const AES_KEY *key2, const unsigned char *ivec,
const int enc);
AES 加密/解密,输入输出数据区可以重叠,初始化向量是加密数据块的4倍,加密前用第一部分做一次异或,加密后用第二部分做一次异或;
最后一个加密数据块,加密前用第三部分异或,加密后用第四部分异或;
in: 需要加密/解密的数据;
out: 计算后输出的数据;
length: 数据长度;
key: 密钥;
ivec: 初始化向量
enc: 计算模式, 加密: AES_ENCRYPT , 解密: AES_DECRYPT
int AES_wrap_key(AES_KEY *key, const unsigned char *iv,
unsigned char *out,
const unsigned char *in, unsigned int inlen)
用AES算法对明文key数据加密
key: AES Key,用于加密密钥数据
iv: 初始化向量
out: 加密后的密钥数据
in: 密钥数据
inlen: 密钥数据长度
返回值: 1: 成功, 0: 失败
int AES_unwrap_key(AES_KEY *key, const unsigned char *iv,
unsigned char *out,
const unsigned char *in, unsigned int inlen)
用AES算法对明文key数据加密
key: AES Key,用于加密密钥数据
iv: 初始化向量
out: 加密后的密钥数据
in: 密钥数据
inlen: 密钥数据长度
返回值: 1: 成功, 0: 失败
转自:http://blog.csdn.net/sunspider107/article/details/7375816
感谢分享