openssl工具使用
1.获取随机数(rand)
# 获取帮助
$ openssl rand -h
# 获取16字节数据, 并且以16进制输出到屏幕
$ openssl rand -hex 16
# 获取16字节数据, 并且以16进制输出到infile.txt文件
$ openssl rand -out infile.txt -hex 16
# 获取16字节数据, 并且以base64输出到屏幕
$ openssl rand -base64 16
2.摘要digest(dgst)、hash
# 获取帮助
$ openssl dgst -h
# 用sha1算法对infile.txt做摘要
$ openssl dgst -sha1 infile.txt
# 用sha256算法对infile.txt做摘要
$ openssl dgst -sha256 infile.txt
# 用sha256算法对infile.txt做摘要, 结果输出到dgst_sha256文件
$ openssl dgst -sha256 -out dgst_sha256 infile.txt
# 用带hmac key的sha256算法对infile.txt做摘要, 结果输出到dgst_sha256文件,key为12345678
$ openssl dgst -sha256 -out dgst_sha256_hmac -hmac 12345678 infile.txt
3.对称算法加密解密(enc/dec)
# 获取帮助
$ openssl enc -h
# 原始文件(待加密的文件)infile.txt:
$ cat infile.txt
c3faf198553d22638cf24182577c3a56
# 用aes-128-ecb -e加密, -K接密钥, -p打印key和iv(若-P直接打印key和iv, 生成的-out文件为空)
# 需要加密的文件为infile.txt, 加密后的文件为outfile.txt
# 密钥:11223344112233441122334411223344
$ openssl aes-128-ecb -e -K 11223344112233441122334411223344 -in infile.txt -out outfile.txt -p
# 用aes-128-ecb -d解密, -K接密钥, -p打印key和iv(若-P直接打印key和iv, 生成的-out文件为空)
# 密钥为11223344112233441122334411223344, decfile.txt解密后的文件
$ openssl aes-128-ecb -d -K 11223344112233441122334411223344 -in outfile.txt -out decfile.txt -p
# 用aes-128-cbc -e加密, -K接密钥 -iv接iv值
# 密钥为11223344112233441122334411223344
# iv值为55667788556677885566778855667788
$ openssl aes-128-cbc -e -K 11223344112233441122334411223344 -iv 55667788556677885566778855667788 -in infile.txt -out outfile.txt -p
# 用aes-128-cbc -d解密, -K接密钥 -iv接iv值
$ openssl aes-128-cbc -d -K 11223344112233441122334411223344 -iv 55667788556677885566778855667788 -in outfile.txt -out dec_cbc_file.txt -p
# 用aes-128-cbc -e加密, -pass pass:123456
$ openssl aes-128-cbc -e -in infile.txt -out outfile.txt -pass pass:123456 -p
# 用aes-128-cbc -d解密, -pass pass:123456
$ openssl aes-128-cbc -d -in outfile.txt -out dec_cbc_file.txt -pass pass:123456 -p
# 新建文件pwfile,内容为123456
# 用aes-128-cbc -e加密, -pass file:pwfile
$ openssl aes-128-cbc -e -in infile.txt -out outfile.txt -pass file:pwfile -p
# 用aes-128-cbc -d解密, -pass file:pwfile
$ openssl aes-128-cbc -d -in outfile.txt -out dec_cbc_file.txt -pass file:pwfile -p
4. 非对称算法
4.1 公私钥对的生成
rsa算法私钥生成
# 获取帮助
$ openssl genrsa -h
# 产生rsa私钥, 打印的屏幕, 默认输出私钥长度为2048bits
$ openssl genrsa
# 产生rsa私钥, 打印的屏幕, 指定私钥长度为2048bits
$ openssl genrsa 2048
# 产生rsa私钥, 输出到private_key文件, 默认输出私钥长度为2048bits
$ openssl genrsa -out private_key
# Generating RSA private key, 2048 bit long modulus
# 产生rsa私钥, 输出到private_key文件, 默认输出私钥长度为2048bits, 用des加密, 接下来需要输入des密钥
# des算法使用56bit密钥, des3算法使用168bit密钥
$ openssl genrsa -out private_key -des
产生rsa私钥, 输出到private_key文件, 指定输出私钥长度为4096bits, 用des加密, 接下来需要输入des密钥
$ openssl genrsa -out private_key -des 4096
rsa算法公钥生成
# 获取帮助
$ openssl rsa -h
# 用rsa私钥文件private_key.txt生成公钥文件public_key.txt
# -pubout 指定输出文件是公钥
$ openssl rsa -in private_key.txt -pubout -out public_key.txt
4.2 rsa加解密
注意:无论是使用公钥加密还是私钥加密,RSA每次能够加密的数据长度不能超过RSA密钥长度,并且根据具体的补齐方式不同输入的加密数据最大长度也不一样,而输出长度则总是跟RSA密钥长度相等。RSA不同的补齐方法对应的输入输入长度如下表
# 获取帮助
$ openssl rsautl -h
# 方法一:
# 使用私钥文件进行加密-inkey private_key, 加密结果输出到-out rsa_enc_out.txt
$ openssl rsautl -encrypt -in infile.txt -inkey private_key -out rsa_enc_out.txt
$ cat rsa_enc_out.txt
屏幕显示 乱码
# 使用私钥文件进行解密-inkey private_key, 解密结果输出到-out rsa_infile.txt
$ openssl rsautl -decrypt -in rsa_enc_out.txt -inkey private_key -out rsa_infile.txt
# 方法二:
# 生成RSA密钥
$ openssl genrsa -des3 -passout pass:123456 -out RSA.pem
# 提取公钥
$ openssl rsa -in RSA.pem -passin pass:123456 -pubout -out pub.pem
# 使用RSA作为密钥进行加密,实际上使用其中的公钥进行加密
$ openssl rsautl -encrypt -in plain.txt -inkey RSA.pem -passin pass:123456 -out enc.txt
$ cat enc.txt
屏幕显示 乱码
# 使用RSA作为密钥进行解密,实际上使用其中的私钥进行解密
$ openssl rsautl -decrypt -in enc.txt -inkey RSA.pem -passin pass:123456 -out replain.txt
$ cat replain.txt
屏幕显示 c3faf198553d22638cf24182577c3a56
参考:
https://www.jianshu.com/p/15b1d935a44b
openssl 对称加密算法enc命令详解 - Gordon0918 - 博客园