AES算法
AES进行加/解密需要考虑下面三个设置。
密钥
使用的密钥长度为128/192/256位,这里以128位为例
初始向量
初始向量位128位
填充
AES以128位,即16字节为单位进行操作,如果明文长度不是16的整数倍就需要进行填充,openssl默认以PKCS#7方式进行填充。PKCS#7填充时将明文长度扩充为16的整数倍,每一个填充的字节值为填充的长度。
例如:
如明文长度为8,填充8个字节,每个字节均为0x8。DD表示明文,08为填充。
| DD DD DD DD DD DD DD DD 08 08 08 08 08 08 08 08 |
如明文长度为16,额外填充16个字节。DD表示明文,10为填充。
| DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD | 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 |
openssl命令进行加/解密
1 指定密钥和初始向量
$ openssl enc -aes-128-cbc -in in.txt -out out.txt -K 12345678901234567890 -iv 12345678
将in.txt文件的内容进行加密后输出到out.txt中。这里通过-K指定密钥,-iv指定初始向量。注意AES算法的密钥和初始向量都是128位的,这里-K和-iv后的参数都是16进制表示的,最大长度为32。
即-iv 1234567812345678指定的初始向量在内存中为 | 12 34 56 78 12 34 56 78 00 00 00 00 00 00