openssl使用相关简介
简单的加密一个文件
openssl enc -aes-256-cbc -in input.txt -out output.bin -pass pass:111111
解释一下:
- openssl enc: openssl里面的文件加密功能
- -aes-256-cbc: 加密方法为aes-256-cbc,至于全部的加密方法可以输入openssl enc -help查看
- -in input.txt: 输入文件为input.txt
- -out output.bin: 输出文件为output.bin
- -pass pass:111111: 密码为111111
加上-d可以解密
openssl enc -aes-256-cbc -d -in out.bin -pass pass:111111
公钥与私钥
非对称算法(例如rsa)都需要一个加密密钥和一个解密密钥,不同的场景下这两个密钥可以分别作为公钥与私钥。
比如说我想每个访问我的人都通过密文来传递信息,则可以使用公钥加密私钥解密(SSH通信)。而我想证明某个东西是我发出来的,则可以通过私钥加密公钥解密(证书)。
下面生成一个简单的rsa密钥对:
openssl genrsa -out key.pem 1024
解释一下
- openssl genrsa: 官方文档上说的是生成rsa私钥,但实际上生成的是rsa密钥对
- -out key.pem 输出文件为key.pem
- 1024: 不是哪个意思,指的是密钥大小为1024个比特,默认为512,一般工程上使用的是1024, 2048或更大
之后提取出公钥(加密密钥):
openssl rsa -in key.pem -pubout -out pub-key.pem
然后试试加密文件:
openssl pkeyutl -encrypt -in a.txt -pubin -inkey pub-key.pem -out b.bin
解释一下:
- -inkey pub-key.pem 加密密钥为pub-key.pem
- -pubin 指加密密钥只含有公钥,如果不加这个参数则会出现 unable to load Private Key 的错误
同样,解密:
openssl pkeyutl -decrypt -in b.bin -inkey key.pem -out c.txt
数字签名
电子签名的作用是
- 某人发布过某个消息
- 消息的来源是某人
- 途中没有丢失或篡改
电子签名的实现一般是由加密密钥做私钥,解密密钥做公钥。
参考步骤:
openssl dgst -sha512 -out hash.txt a.txt
解释一下:
- -sha512 哈希算法为sha512,全部的算法可以通过openssl dgst -help查看
- -out hash.txt 输出文件为hash.txt
- a.txt 需要处理的文件为a.txt
之后使用密钥签名
openssl pkeyutl -sign -in hash.txt -out a.sig -inkey key.pem
验证:
openssl pkeyutl -verify -in hash.txt -sigfile a.sig -inkey pub-key.pem -pubin
不想解释
当然,也可以直接用dgst来加密和验证(推荐)
#签名
openssl dgst -sha512 -sign key.pem -out a.sig a.txt
#验证
openssl dgst -sha512 -verify pub-key.pem -signature a.sig a.txt
解释一下
签名中
- -sign 指签名,后面加私钥文件
验证中 - -verify 指验证,后面加公钥文件
- -signature 后面加签名文件
(未完待续)
参考资料
A 6 Part Introductory OpenSSL Tutorial
openssl documentation