(7) openssl dgst(生成和验证数字签名)
该伪命令是单向加密工具,用于生成文件的摘要信息
也可以进行数字签名,及验证数字签名。
首先要明白的是,数字签名的过程是计算出摘要信息,然后使用私钥对摘要信息进行加密得到数字签名,而摘要是使用md5、sha512等单向散列算法计算得出的(而通过私钥加密摘要信息得到数字签名),理解了这一点,openssl dgst命令的用法就完全掌握了。
openssl dgst [-md5|-sha1|...] [-hex | -binary] [-out filename] [-sign filename] [-passin arg] [-verify filename] [-prverify filename] [-signature filename] [file...]
选项说明:
file... :指定待(数字)签名的文件。
-hex :以hex格式输出摘要信息。如果不以-hex显示,签名或验证签名时很可能乱码。
-binary :以二进制格式输出摘要信息,或以二进制格式进行数字签名。这是默认格式。
-out filename :指定输出文件,若不指定则输出到标准输出。
-sign filename :使用私钥filename对file数字签名。签名时绝对不能加-hex等格式的选项,否则验证签名失败
-signature filename :指定待验证的签名文件(验证数字签名时使用)。
-verify filename :使用公钥filename验证数字签名(验证数字签名时使用)。
-prverify filename :使用私钥filename验证数字签名(验证数字签名时使用)。
-passin arg :传递解密密码。若验证签名时使用的公钥或私钥文件是被加密过的,则需要传递密码来解密。
支持如下几种单向加密算法,即信息摘要算法
-md4 to use the md4 message digest algorithm
-md5 to use the md5 message digest algorithm
-ripemd160 to use the ripemd160 message digest algorithm
-sha to use the sha message digest algorithm
-sha1 to use the sha1 message digest algorithm
-sha224 to use the sha224 message digest algorithm
-sha256 to use the sha256 message digest algorithm
-sha384 to use the sha384 message digest algorithm
-sha512 to use the sha512 message digest algorithm
-whirlpool to use the whirlpool message digest algorithm
注意:openssl dgst -md5和openssl md5的作用是一样的,其他单向加密算法也一样,例如openssl dgst -sha等价于openssl sha。
例如:
(1).随机生成一段摘要信息(即单向加密)
- [root@docker121 ssl]# echo "123456"|openssl md5
- (stdin)= f447b20a7fcbf53a5d5be013ea0b15af
(2).对/tmp/a.txt文件生成MD5和sha512摘要信息。
- [root@docker121 ssl]# openssl dgst -md5 /tmp/a.txt
- MD5(/tmp/a.txt)= f447b20a7fcbf53a5d5be013ea0b15af
- [root@docker121 ssl]# openssl md5 /tmp/a.txt
- MD5(/tmp/a.txt)= f447b20a7fcbf53a5d5be013ea0b15af
- [root@docker121 ssl]# openssl dgst sha512 /tmp/a.txt
- [root@docker121 ssl]# openssl dgst -sha512 /tmp/a.txt
- SHA512(/tmp/a.txt)= 1caced6fca2237153d65adfb0f3dbe33b9375e9eb6df17c379f80cd37deb6e6a70159c7e898576db568b871ca1c2ffd1a2cc3205f1b50be5396096335fc29c40
- [root@docker121 ssl]# openssl sha512 /tmp/a.txt
- SHA512(/tmp/a.txt)= 1caced6fca2237153d65adfb0f3dbe33b9375e9eb6df17c379f80cd37deb6e6a70159c7e898576db568b871ca1c2ffd1a2cc3205f1b50be5396096335fc29c40
(3).生成一个私钥,然后使用该私钥对/tmp/a.txt文件签名。使用-hex选项,否则默认输出格式为二进制会乱码。
- [root@docker121 ssl]# openssl genrsa -out private.pem
- Generating RSA private key, 2048 bit long modulus
- ............................+++
- ...............+++
- e is 65537 (0x10001)
- [root@docker121 ssl]# openssl dgst -md5 -hex -sign private.pem /tmp/a.txt
- RSA-MD5(/tmp/a.txt)= 2bccbdc6eafd75408063fef47aaaf7cd5d304911193250dec88a03185a7e59823e7fc18617bc00334f7310fac7ad12be574ebe14c67a3fee243082daff4cd831cbdb38378f995d8982a55a9093d149f117d5783721d8674ab77f08fd3df5eb6cbacbb7dbea88c2c284c552b622d1291cbaf7fe6190182f264c2a5ba964755cff160f81d66f19cfbc787004ecafede12f56bf357a0130ca9e63f8905aa314ca530d0f4c8a71d3283363033f9c93280dbcbaf2f959540cc8ba9e067676938f6d848032b9da21673877da6c444118b09444c431a67bd6122979b2f4fe43610ba1edf273e428e2fb3aef6cbd2b0f1a7fcb9784f03d59ce6101d0c191450b6a2206b3
- [root@docker121 ssl]# openssl dgst -md5 -sign private.pem /tmp/a.txt
- +̽@z0I2PZ~Y3Os$087l"/&L*[/V0ʞcL3c?YT
- Ⱥ!g8w1)ya
- :˗j"ot@docker121 ssl]#
如果要验证签名,那么这个生成的签名要保存到一个文件中,且一定不能使用"-hex"选项,否则验证签名必失败。以下分别生成使用和不使用hex格式的签名文件以待验证签名测试。
- [root@docker121 ssl]# openssl dgst -md5 -hex -sign private.pem -out md5_hex.sign /tmp/a.txt
- [root@docker121 ssl]# ll
- total 8
- -rw-r--r-- 1 root root 534 Oct 4 00:03 md5_hex.sign
- -rw-r--r-- 1 root root 1679 Oct 3 23:54 private.pem
- [root@docker121 ssl]# cat md5_hex.sign
- RSA-MD5(/tmp/a.txt)= 2bccbdc6eafd75408063fef47aaaf7cd5d304911193250dec88a03185a7e59823e7fc18617bc00334f7310fac7ad12be574ebe14c67a3fee243082daff4cd831cbdb38378f995d8982a55a9093d149f117d5783721d8674ab77f08fd3df5eb6cbacbb7dbea88c2c284c552b622d1291cbaf7fe6190182f264c2a5ba964755cff160f81d66f19cfbc787004ecafede12f56bf357a0130ca9e63f8905aa314ca530d0f4c8a71d3283363033f9c93280dbcbaf2f959540cc8ba9e067676938f6d848032b9da21673877da6c444118b09444c431a67bd6122979b2f4fe43610ba1edf273e428e2fb3aef6cbd2b0f1a7fcb9784f03d59ce6101d0c191450b6a2206b3
- [root@docker121 ssl]#
- [root@docker121 ssl]# openssl dgst -md5 -sign private.pem -out md5_nohex.sign /tmp/a.txt
- [root@docker121 ssl]# ll
- total 12
- -rw-r--r-- 1 root root 534 Oct 4 00:03 md5_hex.sign
- -rw-r--r-- 1 root root 256 Oct 4 00:04 md5_nohex.sign
- -rw-r--r-- 1 root root 1679 Oct 3 23:54 private.pem
- [root@docker121 ssl]# cat md5_nohex.sign
- +̽@z0I2PZ~Y3Os$087l"/&L*[/V0ʞcL3c?YT
- Ⱥ!g8w1)ya
- :˗j"ot@docker121 ssl]#
(4).验证签名。验证签名的过程实际上是对待验证文件新生成签名,然后与已有签名文件进行比对,如果比对结果相同,则验证通过。所以,在验证签名时不仅要给定待验证的签名文件,也要给定相同的算法,相同的私钥或公钥文件以及待签名文件以生成新签名信息。
以下先测试以私钥来验证数字签名文件。
首先对未使用hex格式的签名文件md5_nohex.sign进行验证。由于生成md5_nohex.sign时使用的是md5算法,所以这里必须也要指定md5算法。
- [root@docker121 ssl]# openssl dgst -md5 -prverify private.pem -signature md5_nohex.sign /tmp/a.txt
- Verified OK
再对使用了hex格式的签名文件md5_hex.sign进行验证,不论在验证时是否使用了hex选项,结果都是验证失败。
- [root@docker121 ssl]# openssl dgst -md5 -prverify private.pem -signature md5_hex.sign /tmp/a.txt
- Verification Failure
- [root@docker121 ssl]# openssl dgst -md5 -hex -prverify private.pem -signature md5_hex.sign /tmp/a.txt
- Verification Failure
再测试使用公钥来验证数字签名。
- [root@docker121 ssl]# openssl rsa -in genrsa.pri -pubout -out rsa.pub #从私钥中提取公钥
- [root@docker121 ssl]# openssl dgst -md5 -verify rsa.pub -signature md5_nohex.sign /tmp/a.txt
- Verified OK
(7) openssl dgst(生成和验证数字签名)的更多相关文章
- openssl dgst(生成和验证数字签名)
openssl系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 该伪命令是单向加密工具,用于生成文件的摘要信息,也可以进行数字签名,验证数字 ...
- 5.openssl dgst
该伪命令用于生成文件的信息摘要,也可以进行数字签名,验证数字签名. 首先要明白,要进行数字签名,需要计算出特征码即数字摘要,然后使用私钥对数字摘要进行签名.特征码使用md5,sha等计算出. 对象只能 ...
- openssl req(生成证书请求和自建CA)
伪命令req大致有3个功能:生成证书请求文件.验证证书请求文件和创建根CA.由于openssl req命令选项较多,所以先各举几个例子,再集中给出openssl req的选项说明.若已熟悉openss ...
- (11) openssl req(生成请求证书、私钥和自建CA)
伪命令req大致有3个功能:生成证书请求文件.验证证书请求文件和创建根CA. 由于openssl req命令选项较多,所以先各举几个例子,再集中给出openssl req的选项说明.若已熟悉opens ...
- (8) openssl rsautl(签名/验证签名/加解密文件)和openssl pkeyutl(文件的非对称加密)
rsautl是rsa的工具,相当于rsa.dgst的部分功能集合,可用于生成数字签名.验证数字签名.加密和解密文件. pkeyutl是非对称加密的通用工具,大体上和rsautl的用法差不多,所以此处只 ...
- openssl req(生成证书请求和自建CA)(转)
openssl req(生成证书请求和自建CA) 伪命令req大致有3个功能:生成证书请求文件.验证证书请求文件和创建根CA.由于openssl req命令选项较多,所以先各举几个例子,再集中 ...
- Java代码实现文件添加数字签名、验证数字签名
Linux下实现加签.验签 1.使用OpenSSL 生成公钥和密钥: #用 OpenSSL, Linux 上自带,常用命令如下: #生成 RSA 私钥(传统格式的) openssl genrsa -o ...
- openssl pem 生成公钥和私钥及文件
openssl pem.h 中提供了关于pem格式密钥对的操作接口 通常使用.pem的格式文件来保存openssl 生成的密钥对: 在终端下 cat xxx.pem 可以看到 p.p1 { margi ...
- openssl windows 生成公钥与私钥
链接: https://pan.baidu.com/s/1qn-qeFxovor-vcAWFl8jIw 提取码: zy5v 一,下载安装windows平台openssl密钥生成工具,执行安装目录bin ...
随机推荐
- python __builtins__ bytes类 (8)
8.'bytes', 字符串转换成字节流.第一个传入参数是要转换的字符串,第二个参数按什么编码转换为字节. class bytes(object) | bytes(iterable_of_ints) ...
- document.body 与 document.documentElement区别介绍
什么是document.body? 返回html dom中的body节点 即<body> 什么是 document.documentElement? 返回html dom中的root 节点 ...
- DP HDOJ 5492 Find a path
题目传送门 题意:从(1, 1)走到(n, m),每次往右或往下走,问(N+M−1)∑(Ai−Aavg)2 的最小值 分析:展开式子得到(N+M−1)∑(Ai2) - (∑(Ai))2的最小值.用普通 ...
- 不通过ecplise,只通过文件目录 创建最简单的JSP文件
手动创建最简单的JSP 文件 1.在Tomcat 6.0的安装目录的webapps目录下新建一个目录,起名叫myapp. 2.在myapp目录下新建一个目录WEB-INF,注意,目录名称是区分大小 ...
- 使用mysql作为配置文件的地址
server端配置 POM文件 <dependency> <groupId>org.springframework.boot</groupId> <artif ...
- position 位置、表单
一.position 位置 1.只要使用了定位,必须有一个相对的参照物 2.具体定位的那个元素需加position:absolute:(绝对的) 绝对的:就是具体到某一个地方,特别详细的意思 ...
- 【学习笔记】深入理解js原型和闭包系列学习笔记——精华
深入理解js原型和闭包笔记: 1.“一切皆是对象”,对象是属性的集合. 丨 函数也是对象,但是使用typeof时为什么函数返回function而 丨 不是object呢,js为何要对函数做这样的区分 ...
- 如何配置TomCat
1.先查看你自己java的jdk的版本号 2.通过jdk版本号确定下载的Tomcat版本 ,因为我的是jdk 1.8的,所以要下载Tomcat 8版本 附上下载官网http://tomcat.apac ...
- Selenium私房菜系列--总章
前言 在这段期间,我一直在找关于服务器的端测试方案,自动化工具等等,无意间我发现了Selenium这个工具.在试用一段时间后,觉得Selenium确实是一个很不错的Web测试工具.在和强大的QTP比较 ...
- [Java 8] (8) Lambda表达式对递归的优化(上) - 使用尾递归 .
递归优化 很多算法都依赖于递归,典型的比如分治法(Divide-and-Conquer).但是普通的递归算法在处理规模较大的问题时,常常会出现StackOverflowError.处理这个问题,我们可 ...