注意事项
- 使用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字节。
参考链接