操作流程为:

生成RSA密钥key.pem(也称私钥,密钥对)。
从key.pem中导出公钥pubkey.pem。
使用公钥pubkey.pem对文件test.txt进行加密,得到密文test.enc。
使用私钥key.pem对test.enc进行解密,得到译文test.dec。
对比test.txt和test.dec,应该是一样的。
使用key.pem对test.txt进行签名,得到test.sig。
使用pubkey.pem对test.txt的签名test.sig进行验签。

key.pem ====导出=====> pubkey.pem
pubkey.pem + text.txt ===公钥加密===> test.enc
key.pem + test.enc ===私钥解密===> test.dec
key.pem + test.txt ===私钥签名===> test.sig
pubkey.pem + test.txt + test.sig ==> 验证签名

命令如下:

1. 生成密钥对并导出公钥

# 生成密钥对
openssl genrsa -out key.pem

# 导出公钥
openssl rsa -in key.pem -pubout -out pubkey.pem

参数说明:

-out: 指定输出的文件
-in: 指定输入的文件
-pubout: 指定输出公钥。如果不加该参数,默认输出的为私钥

2. 加解密操作

# 生成一个待加密的测试文件
echo "hello, world" > test.txt
# 公钥加密
openssl rsautl -encrypt -pubin -inkey pubkey.pem -in test.txt -out test.enc
openssl rsautl -decrypt -inkey key.pem -in test.enc -out test.dec

参数说明:

-encrypt: 加密操作
-decrypt: 解密操作
-pubin: 指定输入公钥。如果不加该参数,则认为输入的为私钥
-inkey: 密钥文件

核对文件

# 如果没有任何输出,则文件相同
cmp test.txt test.dec

3. 签名、验签

# 签名
openssl dgst -sign key.pem -sha256 -out test.sig test.txt
# 验签
openssl dgst -verify pubkey.pem -sha256 -signature test.sig test.txt

参数说明:

-sign: 使用私钥签名
-verify: 使用公钥验签
-sha256: 摘要算法,也可以为md5/sha1/sha384/sha512等,签名验签使用的摘要算法应相同
-signature: 待验证的签名文件

4. 查看密钥信息

# 查看私钥信息
openssl rsa -in key.pem -noout -text

# 查看公钥信息
openssl rsa -pubin -in pubkey.pem -noout -text

参数说明:

-noout: 不打印密钥数据
-text: 以文本方式打印密钥信息

转自:https://segmentfault.com/a/1190000018084284