首页 > 代码库 > 5.openssl dgst
5.openssl dgst
该伪命令用于生成文件的信息摘要,也可以进行数字签名,验证数字签名。
首先要明白,要进行数字签名,需要计算出特征码即数字摘要,然后使用私钥对数字摘要进行签名。特征码使用md5,sha等计算出。
对象只能是文件,不能是一段数据。
[root@xuexi tmp]# man dgst NAME dgst, md5, md4, md2, sha1, sha, mdc2, ripemd160 - message digests SYNOPSIS openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1] [-c] [-d] [-hex] [-binary] [-out filename] [-sign filename] [-keyform arg] [-passin arg] [-verify filename] [-prverify filename] [-signature filename] [-hmac key] [file...] [md5|md4|md2|sha1|sha|mdc2|ripemd160] [-c] [-d] [file...] DESCRIPTION The digest functions output the message digest of a supplied file or files in hexadecimal form.They can also be used for digital signing and verification.
可以看出openssl dgst -md5和openssl md5的作用是一样的。
-sign filename:使用filename中的私钥对file数字签名。签名时绝对不能加-hex等格式的选项,否则验证签名必失败,亲测。
-verify filename:使用filename中的公钥验证数字签名
-prverify filename:使用filename中的私钥验证数字签名
-signature filename:指定filename为待验证的签名文件
-out filename:输出到filename而不是stdout
-hex:以16进制显示结果。如果不以-hex显示,再签名或验证签名文件时很可能乱码
例如,对/tmp/a.txt文件生成MD5摘要信息。
[root@xuexi tmp]# openssl dgst -md5 a.txt
MD5(a.txt)= 0bbee18df3acef3f0f8496eb7e1d03ad
例如,使用前文生成的私钥文件/tmp/genrsa.txt对/tmp/a.txt文件签名。要指定单向加密算法,如md5,sha1,不指定时默认为sha1。使用-hex选项,否则默认输出格式为二进制会乱码。
[root@xuexi tmp]# openssl dgst -md5 -hex -sign genrsa.txt a.txt
RSA-MD5(a.txt)= 253a5f9009d697d19cbce426bf46bbcf3623359923cb24fd4a16a9852581bba7ff10cc5aefeebdf112a9cb22394d07aeab18f8af89e24a82a688a4acfe88db3dbef821d9a30360a0e88bb9006608ab46dda4333ed260e231bbd0f7a7c7ba478f796c1787a3fa5645bc0497336374d18af320aaacfc35f34e12dd7e72e5b729ea
但是记得,如果要验证签名,那么这个生成的签名要保存到一个文件中,且一定一定不能使用-hex等格式化选项,否则验证签名必失败。
RSA签名和验证签名的过程
重点在于签名时不能使用“-hex”等格式化选项。
先生成RSA私钥文件rsa.file。
[root@xuexi tmp]# openssl genrsa -out rsa.file 2048 Generating RSA private key, 2048 bit long modulus ...............................................................................................................................+++ .......................................................................+++ e is 65537 (0x10001)
提取公钥到rsa.file.pub文件。
[root@xuexi tmp]# openssl rsa -in rsa.file -pubout -out rsa.file.pub writing RSA key
使用MD5算法计算摘要信息并同时使用私钥加密摘要信息得到数字签名,签名保存在xxx.sign文件中。记得不要加-hex等格式化输出的选项。
[root@xuexi tmp]# openssl dgst -md5 -sign rsa.file -out xxx.sign xxx.txt
分别使用公钥和私钥文件进行数字签名的验证。记得指定md5算法对xxx.txt计算信息摘要,以便和验证签名得到的摘要对比。
[root@xuexi tmp]# openssl dgst -md5 -verify rsa.file.pub -signature xxx.sign xxx.txt Verified OK
[root@xuexi tmp]# openssl dgst -md5 -prverify rsa.file -signature xxx.sign xxx.txt Verified OK
5.openssl dgst