openssl-对称AES算法(二)

Posted by 周思进 on April 17, 2022

本文针对 openssl 命令实现 AES 算法加解密操作进行说明。

一、字符串加解密
1、加密

$ echo -n "12345678" | openssl aes-256-cbc -p -nosalt -k 12345 -base64
*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.
key=5994471ABB01112AFCC18159F6CC74B4F511B99806DA59B3CAF5A9C173CACFC5
iv =2A4097FB478A1421F41B03E7E89DC301
Aeu3hWGtmPw+fF/giSOhCQ==

选项说明:
aes-256-cbc 使用的加密算法,对于可用的算法,可以通过命令 openssl list -cipher-algorithms 进行查看,但AEAD模式算法命令行并不支持,如GCM模式
-p 打印实际对称密钥 KEY 和 IV
-k 用户口令,以此派生加密实际使用的 KEY 和 IV
-nosalt 使用明文口令派生 KEY 时不加盐,KEY 和 IV 就固定不会变
-base64 结果以 base64编码格式展示
-nopad 不使用填充模式,这个如果加密数据不是块大小,会报错

上述命令与下面命令执行效果等同:

$ echo -n "12345678" | openssl aes-256-cbc -p -nosalt -K 5994471ABB01112AFCC18159F6CC74B4F511B99806DA59B3CAF5A9C173CACFC5 -iv 2A4097FB478A1421F41B03E7E89DC301 -base64
key=5994471ABB01112AFCC18159F6CC74B4F511B99806DA59B3CAF5A9C173CACFC5
iv =2A4097FB478A1421F41B03E7E89DC301
Aeu3hWGtmPw+fF/giSOhCQ==

2、解密

$ echo Aeu3hWGtmPw+fF/giSOhCQ== | openssl aes-256-cbc -d -nosalt -k 12345 -base64
*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.
12345678

选项说明:
-d 进行解密操作
其他选项跟加密都一样


二、文件加解密

$ openssl aes-256-cbc -p -nosalt -k 12345 -in input.file -out output.file
*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.
key=5994471ABB01112AFCC18159F6CC74B4F511B99806DA59B3CAF5A9C173CACFC5
iv =2A4097FB478A1421F41B03E7E89DC301

选项说明:
-in 指定要加密的源文件
-out 指定加密后存储至指定文件

这里没有将结果转成 base64 编码,可以通过 hexdump 命令查看16进制输出

$ hexdump output.file
0000000 eb01 85b7 ad61 fc98 7c3e e05f 2389 09a1