日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java openssl dgst_(7) openssl dgst(生成和验证数字签名)

發(fā)布時間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java openssl dgst_(7) openssl dgst(生成和验证数字签名) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

該偽命令是單向加密工具,用于生成文件的摘要信息

也可以進行數(shù)字簽名,及驗證數(shù)字簽名。

首先要明白的是,數(shù)字簽名的過程是計算出摘要信息,然后使用私鑰對摘要信息進行加密得到數(shù)字簽名,而摘要是使用md5、sha512等單向散列算法計算得出的(而通過私鑰加密摘要信息得到數(shù)字簽名),理解了這一點,openssl dgst命令的用法就完全掌握了。

openssl dgst [-md5|-sha1|...] [-hex | -binary] [-out filename] [-sign filename] [-passin arg] [-verify filename] [-prverify filename] [-signature filename]? ?[file...]

選項說明:

file...? ? ? ? ? ? ? ? ? ? ? ?:指定待(數(shù)字)簽名的文件。

-hex? ? ? ? ? ? ? ? ? ? ? ? :以hex格式輸出摘要信息。如果不以-hex顯示,簽名或驗證簽名時很可能亂碼。

-binary? ? ? ? ? ? ? ? ? ? :以二進制格式輸出摘要信息,或以二進制格式進行數(shù)字簽名。這是默認格式。

-out filename? ? ? ? ? :指定輸出文件,若不指定則輸出到標準輸出。

-sign filename? ? ? ? ?:使用私鑰filename對file數(shù)字簽名。簽名時絕對不能加-hex等格式的選項,否則驗證簽名失敗

-signature filename :指定待驗證的簽名文件(驗證數(shù)字簽名時使用)。

-verify filename? ? ? ? :使用公鑰filename驗證數(shù)字簽名(驗證數(shù)字簽名時使用)。

-prverify filename? ? ?:使用私鑰filename驗證數(shù)字簽名(驗證數(shù)字簽名時使用)。

-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).驗證簽名。驗證簽名的過程實際上是對待驗證文件新生成簽名,然后與已有簽名文件進行比對,如果比對結(jié)果相同,則驗證通過。所以,在驗證簽名時不僅要給定待驗證的簽名文件,也要給定相同的算法,相同的私鑰或公鑰文件以及待簽名文件以生成新簽名信息。

以下先測試以私鑰來驗證數(shù)字簽名文件。

首先對未使用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選項,結(jié)果都是驗證失敗。

[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

再測試使用公鑰來驗證數(shù)字簽名。

[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

總結(jié)

以上是生活随笔為你收集整理的java openssl dgst_(7) openssl dgst(生成和验证数字签名)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。