命令行工具openssl支持丰富的加密算法,对于日常的加密学习和工作非常方便

安装

linux

debian/ubuntu

sudo apt install openssl

centos

sudo yum install openssl

Macos

brew install openssl

Macos上通常默认已经安装了一个LibreSSL ,所以默认会使用这个版本,但是由于该版本功能不全,可以通过openssl version 查看,如果是的话,需要在当前用户环境变量中覆盖一下,以使用刚才安装的版本:

echo 'export PATH="/usr/local/opt/openssl@1.1/bin:$PATH"' >> .bash_profile
source .bash_profile
openssl version

命令参数使用简要

openssl help

查看某个命令的参数详情: openssl command -help 例如,查看命令 enc 的参数细节

openssl enc -help

image.png

SHA256摘要

echo 'Hello World' | openssl dgst -sha256

image.png

RSA 非对称加密

生成密匙对

生成私匙

openssl genpkey -algorithm RSA -out privatekey.pem -pkeyopt rsa_keygen_bits:1024

生成公匙

openssl rsa -pubout -in privatekey.pem -out publickey.pem

image.png

查看私匙和公匙的细节

openssl rsa -text -in privatekey.pem
openssl pkey -in publickey.pem -pubin -text

加密

echo test_data > message.txt
openssl rsautl -encrypt -inkey publickey.pem -pubin -in message.txt -out message.rsa

或者也可以结合为一条命令

echo testdata | openssl rsautl -encrypt -inkey publickey.pem -pubin -in message.txt -out message.rsa

这样加密后的文件内容
image.png

解密

openssl rsautl -decrypt -inkey privatekey.pem -in message.rsa -out message.dec

签名

生成签名

openssl dgst -sha256 -sign privatekey.pem -out signature.bin message.txt 

签名验证

openssl dgst -sha256 -verify publickey.pem -signature signature.bin message.txt

AES对称加密

这里以AES-256-CBC为例

加密

echo abc_test > test.txt
openssl enc -aes-256-cbc -in test.txt -out test.encry -pbkdf2

或者使用管道符合并为一条命令

echo abc_test | openssl enc -aes-256-cbc -in test.txt -out test.encry -pbkdf2
#如果要将加密后内容base64编码加一个 -a 参数
echo abc_test | openssl enc -aes-256-cbc -in test.txt -a -out test.encry -pbkdf2

解密

openssl enc -aes-256-cbc -d -in test.encry -pbkdf2
#如果加密内容经过base64编码加一个 -a 参数
openssl enc -aes-256-cbc -d -in test.encry -a -pbkdf2

注意:in参数可以不指定通过标准输入传入,out可以不指定输出文件会输出到标准输出

Q.E.D.