生成公钥私钥
使用命令生成私钥:
1
openssl genrsa -out rsa_private_key.pem 1024
参数:
- genrsa 生成密钥
- -out 输出到文件 rsa_private_key.pem 文件名
- 1024 长度(bit)
从私钥中提取公钥:
1
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
参数:
- rsa 提取公钥
- -in 从文件中读入 rsa_private_key.pem 文件名
- -pubout 输出
- -out 到文件 rsa_public_key.pem 文件名
公钥加密-私钥解密
新建一个readme.txt 内容是taoshihan
使用公钥加密:
1
openssl rsautl -encrypt -in readme.txt -inkey rsa_public_key.pem -pubin -out hello.en
参数:
- rsautl 加解密
- -encrypt 加密
- -in 从文件输入
- readme.txt 文件名
- -inkey 输入的密钥
- rsa_public_key.pem 上一步生成的公钥
- -pubin 表名输入是公钥文件 (默认输入为私钥,所以后文签名时不指定此参数) * -out输出到文件
- hello.en 输出文件名
使用私钥解密:
1
openssl rsautl -decrypt -in hello.en -inkey rsa_private_key.pem -out hello.de
参数:
- -decrypt 解密
- -in 从文件输入 * hello.en 上一步生成的加密文件
- -inkey 输入的密钥 * rsa_private_key.pem 上一步生成的私钥
- -out输出到文件
- hello.de 输出的文件名
私钥签名-公钥验证
1
2
openssl rsautl -sign -in readme.txt -inkey rsa_private_key.pem -out hello.sign
openssl rsautl -verify -in hello.sign -inkey rsa_public_key.pem -pubin -out hello.verify
参数含义与上节公钥加密,私钥解密一致。
加密或签名结果用base64编码
加密或签名之后的字符,大部分为非可显示字符,一般通过base64编码后传输。
base64 编码
1
openssl rsautl -sign -in readme.txt -inkey rsa_private_key.pem | openssl base64
管道操作,把加密结果,送给base64编码
base64 解码
1
openssl base64 -d -in hello.sign | openssl rsautl -verify -inkey rsa_public_key.pem -pubin -out hello.verify
- -d 参数代表解码
- -in 输入文件(没有这个参数代表解码输入字符串),如下
1
echo YWJjCg== | openssl base64 -d
显示结果为:abc
函数api
对应上述版本的功能,都可以从openssl的库中找到对应的api接口调用。
引用
使用openssl实现RSA非对称加密 openssl-man1-rsautl 利用openssl进行BASE64编码解码、md5/sha1摘要、AES/DES3加密解密
C API