对加密算法 AES-128-CBC 的一些理解
简单说明
- AES-128-CBC是一种分组对称加密算法,即用同一组key进行明文和密文的转换,以128bit为一组,128bit==16Byte,意思就是明文的16字节为一组对应加密后的16字节的密文。
- 若最后剩余的明文不够16字节,需要进行填充,通常采用PKCS7进行填充。比如最后缺3个字节,则填充3个字节的0x03;若最后缺10个字节,则填充10个字节的0x0a;
- 若明文正好是16个字节的整数倍,最后要再加入一个16字节0x10的组再进行加密
需要参数
- 传入要加密的明文
- 传入一个16字节的key
- 传入一个16字节的初始偏移向量IV
CBC模式:
用初始向量和密钥加密第一组数据,然后把第一组数据加密后的密文重新赋值给IV,然后进行第二组加密,循环进行直到结束
使用openSSL命令测试
加密
// -e加密,-aes-128-cbc指定使用加密算法,-iv指定偏移向量为16进制,-K指定16进制密钥,-in指定要加密的文件,-out指定密文输出文件
// 初始IV为16个字节的0x00, 密钥为 abcdefghijklmnop
openssl enc -e -aes-128-cbc -iv 0000000000000000 -K 6162636465666768696a6b6c6d6e6f70 -in input -out output
也可以直接用管道指向hexdump
命令进行密文打印
openssl enc -e -aes-128-cbc -iv 0000000000000000 -K 6162636465666768696a6b6c6d6e6f70 -in input | hexdump -C
解密
// -d解密
openssl enc -d -aes-128-cbc -iv 0000000000000000 -K 6162636465666768696a6b6c6d6e6f70 -in input -out output
注意:
每组加密过的密文都要重新赋给偏移向量,然后进行下一组的加密,所以可以用上一组的密文来充当偏移向量解密这一组的密文
网友评论