环境篇-OpenSSL命令行工具使用

本文属于《OpenSSL加密算法库使用系列教程》之一,欢迎查看其它文章。

我们知道常用的加密算法分为对称、非对称、摘要这三种。

那么在OpenSSL中也有对应的命令。

一、对称加密命令

对称加密需要使用的标准命令为enc,可使用如下命令查看使用帮助:

openssl enc -help

在这里插入图片描述

常用选项有:

-e:表示加密,可以指明一种加密算法,若不指的话将使用默认加密算法

-d:表示解密,也可以指定算法,若不指定则使用默认算法,但一定要与加密时的算法一致

-in filename:指定要加密的文件存放路径

-out filename:指定加密后的文件存放路径

-salt:自动插入一个随机数作为文件内容加密,默认选项

-a/-base64:使用-base64位编码格式

-K:指定秘钥,16进制格式

-iv:指定初始化向量,16进制格式

-list:列出当前支持的加密算法列表(openssl enc -list)

举例:

使用aes-128-ecb算法对hello.txt加密,128位密钥为8cc72b05705d5c46f412af8cbed55aad,密文为hello.en。

openssl enc -e -aes-128-ecb -in hello.txt -out hello.en -K 8cc72b05705d5c46f412af8cbed55aad

使用aes-128-ecb算法对hello.en解密,128位密钥为8cc72b05705d5c46f412af8cbed55aad,解密后为hello.de。

openssl enc -d -aes-128-ecb -in hello.en -out hello.de -K 8cc72b05705d5c46f412af8cbed55aad

明文hello.txt与解密后的hello.de相等。如果秘钥不一致,解密后与明文不相等。

openssl enc命令仅适用于OpenSSL中对称加密算法,如AES、DES、Triple-DES。

二、非对称加密命令

主要是指RSA算法等相关命令,包括生成秘钥、加密、数字签名等。

1、生成秘钥

使用openssl genrsa标准命令。

查看帮助:

openssl genrsa -help

生成私钥文件private.pem:

openssl genrsa -out private.pem

这里-out指定生成文件。

根据私钥private.pem提取出公钥public.pem:

openssl rsa -in private.pem -out public.pem -pubout

-in指定输入文件,-out指定提取生成公钥的文件名。至此,我们手上就有了一个公钥,一个私钥。现在可以将用公钥来加密文件了。

2、加密文件

使用openssl rsautl标准命令。

查看帮助:

openssl rsautl -help

我在目录中创建一个hello的文本文件,然后利用之前的公钥进行加密,私钥进行解密。

加密文件:

openssl rsautl -encrypt -in hello.txt -inkey public.pem -pubin -out hello.en

-in指定要加密的文件,-inkey指定密钥,-pubin表明是用纯公钥文件加密,-out为加密后的文件。

解密文件:

openssl rsautl -decrypt -in hello.en -inkey private.pem -out hello.de

-in指定被加密的文件,-inkey指定私钥文件,-out为解密后的文件。

至此,一次加密解密的过程告终。

3、数字签名

数字签名分为摘要和加密两部分,但是在openssl提供的指令中,并没有区分两者。需要注意的是,签名是指对明文的摘要进行加密,得到的密文就称为签名,而非对明文数据进行加密。

使用openssl dgst标准命令。

查看帮助:

openssl dgst -help

使用dgst命令,然后利用之前的私钥进行签名,公钥进行验签。

签名:

openssl dgst -sha1 -sign private.pem -out sign.txt hello.txt

指定sha1算法对hello.txt计算文件摘要,并用私钥对摘要签名,生成签名文件sign.txt

验签:

openssl dgst -verify public.pem -sha1 -signature sign.txt hello.txt

指定sha1算法对hello.txt计算文件摘要,并用公钥对签名文件,进行验签。这里是使用RSA公钥验证签名(verify参数),验证成功。

另外:

大家都知道可以从私钥文件中提取公钥文件,所以验签时,也可以直接用私钥文件来验签。

使用RSA密钥验证签名(prverify参数),验证成功

openssl dgst -prverify private.pem -sha1 -signature sign.txt hello.txt

疑问: 为什么可以从私钥导出公钥,而不能从公钥导出私钥?

从公钥导出私钥,实际上等同于RSA被破解,理论上,RSA可以被破解,但是随着key越长,其破解难度越大。

目前被破解的最长RSA密钥就是768位,因此就常见的RSA 1024位及以上,基本上是不能被破解的。也就是说公钥导出私钥是不成立的。

所以,OpenSSL中可以由私钥导出公钥,猜测应该是私钥的容器往往同时包含私钥与公钥(公钥是让所有人都会知道,那么拥有私钥的人没有道理不留存一份公钥),而公钥的容器仅包含公钥。

三、哈希命令

使用openssl dgst标准命令。

计算hello.txt文件的md5值:

openssl dgst -md5 hello.txt



若对你有帮助,欢迎点赞、收藏、评论,你的支持就是我的最大动力!!!

同时,阿超为大家准备了丰富的学习资料,欢迎关注公众号“超哥学编程”,即可领取。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百里杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值