首页 > 代码库 > 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