OpenSSL AES加密(调查中)

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的安装路径。

选项说明

  1. -k %KEY%-pass pass:%KEY%功能相同
  2. -p打印重要信息
  3. -debug打印调试信息
  4. -nopad不填充(默认填充方式是PKCS5Padding)
  5. -nosalt不加盐(默认加盐)
  6. -base64/-a输出转化为base64格式
  7. -d解密,默认为加密(-e)

问题

  • 为什么-p打印的KEY与-k指定的KEY不一致?而-K指定的值与-p打印的KEY是一致的?
    调查中...

  • AES_ecb_EncodeAES_Encode相同,默认的padding是什么?
    默认paddingPKCS5Padding

  • 为什么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
    68656c6c6f61657368656c6c6f616573helloaeshelloaes十六进制

  • 命令行

  1. 从文件plain.txt中取明文,加密后密文写入cipher.txt
openssl enc -aes-128-ecb -in plain.txt -out cipher.txt -K 68656c6c6f61657368656c6c6f616573 -base64 -p -nosalt
  1. 从文件plain.txt中取明文,加密后密文打印到控制台
openssl enc -aes-128-ecb -in plain.txt -K 68656c6c6f61657368656c6c6f616573 -base64 -p -nosalt
  1. 从控制台读取明文,加密后密文打印到控制台
echo 123456789abcdef0 | openssl enc -aes-128-ecb -K 68656c6c6f61657368656c6c6f616573 -base64 -p -nosalt
  1. 从控制台读取明文,加密后密文打印到控制台(另一种写法)
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。
调查中...


参考

  • 利用openssl进行BASE64编码解码、md5/sha1摘要、AES/DES3加密解密
  • Wiki openssl命令

你可能感兴趣的:(OpenSSL AES加密(调查中))