openssl dgst 消息摘要

<openssl dgst> <[email protected]>

介绍

消息摘要可以对任意长度的消息产生固定长度(16或20个字节)的信息摘要,理论基于单向HASH函数,根据消息摘要无法恢复出原文,所以是安全的;消息原文和消息摘要是一一对应的,所以又被称作指纹。

调用

dgst, md5, md4, md2, sha1, sha, mdc2, ripemd160 - message digests

openssl可以通过标准命令dgst或直接调用消息摘要,例如

E:\OpenSSL\foo>openssl dgst -md5 a.txt
MD5(a.txt)= 6049d6013872759678435a04b1e0c4c0

E:\OpenSSL\foo>openssl md5 a.txt
MD5(a.txt)= 6049d6013872759678435a04b1e0c4c0

md5的结果是16个字节,“6049d6013872759678435a04b1e0c4c0”是16进制的表示方法,也可以使用二进制。

语法

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...]

-c                   分号(colons),16进制(HEX)表示方法中,在每个字节(每两个16进制数字)之间加入一个分号。

E:\OpenSSL\foo>openssl dgst -md5 -c a.txt
MD5(a.txt)= 60:49:d6:01:38:72:75:96:78:43:5a:04:b1:e0:c4:c0

-hex             十六进制表示方法,这也是默认的选项

-binary         输出结果是二进制

E:\OpenSSL\foo>openssl dgst -md5 -binary a.txt
`I?8ru杧CZ编睦
E:\OpenSSL\foo>openssl dgst -md5 -binary -out md5.binary a.txt

E:\OpenSSL\foo>xxd md5.binary
0000000: 6049 d601 3872 7596 7843 5a04 b1e0 c4c0  `I..8ru.xCZ.....

当使用二进制输出到屏幕上时,意料之中的乱码, -out 可以将结果输出到一个文件中,在用xxd查看结果,^_^

-hmac key   消息认证码(Message Authorization Code),生成消息摘要的同时,又使用key进行了加密(我也不知道是什么算法@_@)

E:\OpenSSL\foo>openssl dgst -hmac "123" -md5 a.txt
HMAC-MD5(a.txt)= 5548903c81f04ec99afd4a73dd460d44

-sign filename   用私钥对消息摘要进行签名

E:\OpenSSL\foo>openssl dgst -md5 -sign rsa_pri.pem -out signed_md5.binary a.txt

-verify filename  用公钥对前面进行认证

E:\OpenSSL\foo>openssl dgst -md5 -verify rsa_pub.pem -signature signed_md5.binary a.txt

Verified OK

其中,-signature 用于指定消息摘要签名后的文件,结果为“Verified OK” or "Verified Failure"

rsa私钥文件rsa_pri.pem的产生

E:\OpenSSL\foo>openssl genrsa -out rsa_pri.pem 1024
Loading 'screen' into random state - done
Generating RSA private key, 1024 bit long modulus
..........++++++
..............................................++++++
e is 65537 (0x10001)

rsa公钥文件rsa_pub.pem的产生

E:\OpenSSL\foo>openssl rsa -in rsa_pri.pem -out rsa_pub.pem -pubout
writing RSA key

-prverify  filename    用私钥文件进行验证

E:\OpenSSL\foo>openssl dgst -md5 -prverify rsa_pri.pem -signature signed_md5.binary a.txt
Verified OK

算法介绍

openssl 手册也介绍,除非为了兼容性考虑,新的应用程序应使用sha1消息摘要算法。

md5 产生16字节数据

sha1产生20字节数据

E:\OpenSSL\foo>openssl dgst -sha a.txt
SHA(a.txt)= efe6be521da0e06fcc940fde11decc3c5ce8a13a

E:\OpenSSL\foo>openssl dgst -sha1 a.txt
SHA1(a.txt)= 3b7ef90a7908a832dc925e2941329d8c16912928

E:\OpenSSL\foo>openssl dgst -ripemd160 a.txt
RIPEMD160(a.txt)= d82ad8351eda617af7c24c23189b4ef52c2697c0

E:\OpenSSL\foo>openssl dgst -md5 a.txt
MD5(a.txt)= 6049d6013872759678435a04b1e0c4c0


你可能感兴趣的:(openssl dgst 消息摘要)