OpenSSL命令行
环境
- OS:Win7
- OpenSSL Ver:1.0.2g
AES加密
set PATH=%PATH%;%OPENSSL_HOME%\bin
set OPENSSL_CONF=%OPENSSL_HOME%\ssl\openssl.cnf
echo abcde01234597 | openssl aes-256-ecb -k 64-00-6A-22-A6-31 -base64 | openssl aes-256-ecb -k 64-00-6A-22-A6-31 -base64 -d
注:%OPENSSL_HOME%
是OpenSSL的安装路径。
选项说明
-
-k %KEY%
与-pass pass:%KEY%
功能相同 -
-p
打印重要信息 -
-debug
打印调试信息 -
-nopad
不填充(默认填充方式是PKCS5Padding
) -
-nosalt
不加盐(默认加盐) -
-base64/-a
输出转化为base64格式 -
-d
解密,默认为加密(-e
)
问题
为什么
-p
打印的KEY与-k
指定的KEY不一致?而-K
指定的值与-p
打印的KEY是一致的?
调查中...AES_ecb_Encode
与AES_Encode
相同,默认的padding
是什么?
默认padding
是PKCS5Padding
为什么AES加解密只能是13个字符的明文,多于或少于13个字符都会出错?
echo 123456789abcd | openssl aes-256-ecb -k 64-00-6A-22-A6-31 -base64 -nopad -nosalt -p
调查中...
OpenSSL命令行AES-BASE64加密问题
条件
明文:
123456789abcdef0
密钥:
helloaeshelloaes
68656c6c6f61657368656c6c6f616573
是helloaeshelloaes
十六进制命令行
- 从文件
plain.txt
中取明文,加密后密文写入cipher.txt
openssl enc -aes-128-ecb -in plain.txt -out cipher.txt -K 68656c6c6f61657368656c6c6f616573 -base64 -p -nosalt
- 从文件
plain.txt
中取明文,加密后密文打印到控制台
openssl enc -aes-128-ecb -in plain.txt -K 68656c6c6f61657368656c6c6f616573 -base64 -p -nosalt
- 从控制台读取明文,加密后密文打印到控制台
echo 123456789abcdef0 | openssl enc -aes-128-ecb -K 68656c6c6f61657368656c6c6f616573 -base64 -p -nosalt
- 从控制台读取明文,加密后密文打印到控制台(另一种写法)
echo 123456789abcdef0 | openssl aes-128-ecb -K 68656c6c6f61657368656c6c6f616573 -base64 -p -nosalt
结果
1和2加密结果是:ljBKdznsg/Omq8FypZwk8PyW1AQ8L/GHsk1DAvGBQUQ=
3和4加密结果是:ljBKdznsg/Omq8FypZwk8NOr7YhpT0+6UeR+RPxVmSE=
问题
为什么文件夹读取和控制台读取明文,相同加密方式结果不一致?
调查中...
问题分析
1. 环境
2. 现象
运行echo 123456789abcdefg | openssl aes-256-ecb -k 64-00-6A-22-A6-31 -base64 -nopad -nosalt -p
出现如下错误:
Error: error:0606508A:digital envelope routines:EVP_DecryptFinal_ex:data not multiple of block length
3. 分析
digital envelope routines
:数字信封的例程
data not multiple of block length
:数据不是多块长度
123456789abcdefg
大小是16bytes(128bits),根据AES加密要求,完全符合一个明文块的长度,为什么会出现明文长度不正确的情况?逐渐减少明文长度,经过测试只有密文为123456789abcd
,即13bytes(112bits),为什么是这个结果?
4. 解答
怀疑是OpenSSL 1.0.2g存在Bug。
调查中...