OpenSSL 命令詳解(二)——摘要演算法、簽名、驗籤
鋒影
email:[email protected]
如果你認為本系列文章對你有所幫助,請大家有錢的捧個錢場,點選此處贊助,贊助額0.1元起步,多少隨意
用什麼摘要演算法指令代替時,預設使用該演算法,但也可以指定其他演算法。
使用指令
openssl dgst -
dgst指令 可以用其他摘要演算法指令(如md4\md5\sha1…)代替,含義一樣
計算摘要值
未指定特定摘要演算法時,預設使用md5演算法。
用法:
openssl dgst [-演算法名稱] [-其他選項] inputfile
支援的摘要演算法:
-md5:預設選項,用md5演算法進行摘要。
-md4:用md4演算法進行摘要。
-mdc2:用mdc2演算法進行摘要。
-sha1:用sha1演算法進行摘要。
-sha:用sha演算法進行摘要。
-sha224:用sha演算法進行摘要。
-ripemd160:用ripemd160演算法進行摘要。
-dss1:用dss1演算法進行摘要。
-dss1:用whirlpool演算法進行摘要。
其他選項含義
-out file:輸出到指定檔案
-c:打印出兩個雜湊結果的時候用冒號來分隔開。僅僅設定了[-hex]的時候有效。
-r:用coreutils格式來輸出摘要值。
-rand file:產生隨機數種子的檔案(沒發現產生實際效果)
。-d:打印出BIO除錯資訊值。
-hex:顯示ASCII編碼的十六進位制摘要結果,預設選項。
-binary:以二進位制的形式來顯示摘要結果值。
簽名驗籤
簽名的一般過程:先對資料進行摘要計算,然後對摘要值用私鑰進行簽名。
RSA金鑰簽名驗籤
1.這裡演示以RSA私鑰簽名為例。因此先生成RSA金鑰對。
openssl genrsa -out rsa_private.key
(省略引數設定,使用預設值,模數:1024)由公鑰匯出私鑰。
openssl rsa -in rsa_private.key -pubout -out rsa_public.key
2.簽名
用RSA私鑰對SHA1計算得到的摘要值簽名。
openssl dgst -sign rsa_private.key -sha1 -out sha1_rsa_file.sign file.txt
3.驗籤
用相應的公鑰和相同的摘要演算法進行驗籤,否則會失敗。
openssl dgst -verify rsa_public.key -sha1 -signature sha1_rsa_file.sign file.txt
也可以使用相同的私鑰和相同的摘要演算法進行驗證。
DSA金鑰對簽名驗籤
1.生成DSA引數
openssl dsaparam -out dsa.param 1024
2.由DSA引數產生DSA私鑰
openssl gendsa -out dsa_private.key dsa.param
3.由DSA私鑰生成DSA公鑰
openssl dsa -in dsa_private.key -out dsa_public.key -pubout
4.用DSA私鑰對SHA384計算的摘要值進行簽名。
openssl dgst -sign dsa_private.key -sha384 -out sha384_dsa.sign file.txt
DSA簽名對於某些摘要演算法不匹配,詳見下圖。
5.用相應的公鑰和摘要演算法進行驗籤
openssl dgst -verify dsa_public.key -sha384 -signature sha384_dsa.sign file.txt
6.用相同的私鑰和摘要演算法驗籤
openssl dgst -prverify dsa_private.key -sha384 -signature sha384_dsa.sign file.txt
DSA在每次簽名時,使用了隨機數k,如果對同一訊息進行多次簽名,簽名結果是不同的,所以DSA是一種隨機式數字簽名。
HMAC
HMAC是金鑰相關的雜湊運算訊息認證碼,HMAC運算利用雜湊演算法,以一個金鑰和一個訊息為輸入,生成一個訊息摘要作為輸出。
openssl dgst -md5 -hmac "asfdsdfsg" file.txt