注意事项
使用API的时候,需要特别小心数据长度,一般没有指定长度的参数,默认都是16(AES_BLOCK_SIZE
)个字节。输出数据的长度一般都是16字节的倍数,否则会出现数组越界访问。 以下API中,encrypt表示加密,decrypt表示解密。
生成加密/解密的key
int AES_set_encrypt_key(const unsigned char *userKey, const int bits,
AES_KEY *key);
int AES_set_decrypt_key(const unsigned char *userKey, const int bits,
AES_KEY *key);
参数说明
参数名称 描述 userKey 用户指定的密码。注意:只能是16、24、32字节。如果密码字符串长度不够,可以在字符串末尾追加一些特定的字符,或者重复密码字符串,直到满足最少的长度。 bits 密码位数。即userKey的长度 * 8,只能是128、192、256位。 key 向外输出参数。
使用AES加密解密key
void AES_encrypt(const unsigned char *in, unsigned char *out,
const AES_KEY *key);
void AES_decrypt(const unsigned char *in, unsigned char *out,
const AES_KEY *key);
参数说明
参数名称 描述 in 输入数据。必须是16字节。 out 输出数据。必须是16字节。 key 使用AES_set_encrypt/decrypt_key生成的Key。
AES_encrypt/AES_decrypt一次只处理16个字节。如果输入数据较长,你需要使用循环语句,每16个字节处理一次,直到所有数据处理完毕。如果数据不足16字节,可以用0填充至16字节。
参考链接