OpenSSL对称加密

OpenSSL版本

# ??? @ ??? in ~/workspace/博客/ [23:44:33] C:130
$ openssl version
OpenSSL 1.1.1h  22 Sep 2020

OpenSSL支持的对称加密算法

openssl enc -list
  • -aes-128-cbc
  • -aes-128-cfb
  • -aes-128-cfb1
  • -aes-128-cfb8
  • -aes-128-ctr
  • -aes-128-ecb
  • -aes-128-ofb
  • -aes-192-cbc
  • -aes-192-cfb
  • -aes-192-cfb1
  • -aes-192-cfb8
  • -aes-192-ctr
  • -aes-192-ecb
  • -aes-192-ofb
  • -aes-256-cbc
  • -aes-256-cfb
  • -aes-256-cfb1
  • -aes-256-cfb8
  • -aes-256-ctr
  • -aes-256-ecb
  • -aes-256-ofb
  • -aes128
  • -aes128-wrap
  • -aes192
  • -aes192-wrap
  • -aes256
  • -aes256-wrap
  • -aria-128-cbc
  • -aria-128-cfb
  • -aria-128-cfb1
  • -aria-128-cfb8
  • -aria-128-ctr
  • -aria-128-ecb
  • -aria-128-ofb
  • -aria-192-cbc
  • -aria-192-cfb
  • -aria-192-cfb1
  • -aria-192-cfb8
  • -aria-192-ctr
  • -aria-192-ecb
  • -aria-192-ofb
  • -aria-256-cbc
  • -aria-256-cfb
  • -aria-256-cfb1
  • -aria-256-cfb8
  • -aria-256-ctr
  • -aria-256-ecb
  • -aria-256-ofb
  • -aria128
  • -aria192
  • -aria256
  • -bf
  • -bf-cbc
  • -bf-cfb
  • -bf-ecb
  • -bf-ofb
  • -blowfish
  • -camellia-128-cbc
  • -camellia-128-cfb
  • -camellia-128-cfb1
  • -camellia-128-cfb8
  • -camellia-128-ctr
  • -camellia-128-ecb
  • -camellia-128-ofb
  • -camellia-192-cbc
  • -camellia-192-cfb
  • -camellia-192-cfb1
  • -camellia-192-cfb8
  • -camellia-192-ctr
  • -camellia-192-ecb
  • -camellia-192-ofb
  • -camellia-256-cbc
  • -camellia-256-cfb
  • -camellia-256-cfb1
  • -camellia-256-cfb8
  • -camellia-256-ctr
  • -camellia-256-ecb
  • -camellia-256-ofb
  • -camellia128
  • -camellia192
  • -camellia256
  • -cast
  • -cast-cbc
  • -cast5-cbc
  • -cast5-cfb
  • -cast5-ecb
  • -cast5-ofb
  • -chacha20
  • -des
  • -des-cbc
  • -des-cfb
  • -des-cfb1
  • -des-cfb8
  • -des-ecb
  • -des-ede
  • -des-ede-cbc
  • -des-ede-cfb
  • -des-ede-ecb
  • -des-ede-ofb
  • -des-ede3
  • -des-ede3-cbc
  • -des-ede3-cfb
  • -des-ede3-cfb1
  • -des-ede3-cfb8
  • -des-ede3-ecb
  • -des-ede3-ofb
  • -des-ofb
  • -des3
  • -des3-wrap
  • -desx
  • -desx-cbc
  • -id-aes128-wrap
  • -id-aes128-wrap-pad
  • -id-aes192-wrap
  • -id-aes192-wrap-pad
  • -id-aes256-wrap
  • -id-aes256-wrap-pad
  • -id-smime-alg-CMS3DESwrap
  • -idea
  • -idea-cbc
  • -idea-cfb
  • -idea-ecb
  • -idea-ofb
  • -rc2
  • -rc2-128
  • -rc2-40
  • -rc2-40-cbc
  • -rc2-64
  • -rc2-64-cbc
  • -rc2-cbc
  • -rc2-cfb
  • -rc2-ecb
  • -rc2-ofb
  • -rc4
  • -rc4-40
  • -seed
  • -seed-cbc
  • -seed-cfb
  • -seed-ecb
  • -seed-ofb
  • -sm4
  • -sm4-cbc
  • -sm4-cfb
  • -sm4-ctr
  • -sm4-ecb
  • -sm4-ofb

一个简单的示例

openssl enc -in a.txt -out a.txt.enc -e -sm4-ofb -pbkdf2 -salt -rand /dev/random

openssl enc -in a.txt.enc -out a.txt.enc.dec -d -sm4-ofb -pbkdf2
  • -in 输入文件
  • -out 输出文件
  • -e 进行加密
  • -d 进行解密
  • -sm4-ofb sm4-ofb加密算法
  • -pbkdf2 pbkdf2密钥派生函数
  • -salt 为密钥派生函数使用盐
  • -rand 从指定来源获取随机数

openssl会要求输入两遍密码,输入的密码,不会在屏幕上显示

为了获取足够的熵产生随机数,可能需要一段时间

在脚本中使用明文口令(不建议)

openssl enc -in a.txt -out a.txt.enc -e -sm4-ofb -pbkdf2 -salt -pass pass:12345

openssl enc -in a.txt.enc -out a.txt.enc.dec -d -sm4-ofb -pbkdf2 -salt -pass pass:12345
openssl enc -in a.txt -out a.txt.enc -e -sm4-ofb -pbkdf2 -salt -k 12345

openssl enc -in a.txt.enc -out a.txt.enc.dec -d -sm4-ofb -pbkdf2 -salt -k 12345
  • -pass 指定加密口令来源(方法一)
  • -k 指定加密口令(方法二)

大文件性能测试

配置
CPUIntel I5-7200U
Memory16 GB
DiskMemory tmpfs
OSUbuntu 18.04.1

文件大小:2.4 GB,加密用时: 25 秒,解密用时:25 秒

国密算法支持

1.1.1g版本支持国密算法:SM2 SM3 SM4

openssl ecparam -list_curves | grep "SM"
openssl dgst -list | grep "\-sm"
openssl enc -list | grep "\-sm"