OpenSSL中的dgst、dh、dhparam、enc命令使用說明


OpenSSL中的dgst、dh、dhparam、enc命令使用說明

dgst

主要用於數據摘要、數據簽名以及驗證簽名。

概要

openssl dgst [-digest] [-help] [-c] [-d] [-list] [-hex] [-binary] [-r] [-out filename] [-sign filename] [-keyform arg] [-passin arg] [-verify filename] [-prverify filename] [-signature filename] [-sigopt nm:v] [-hmac key] [-fips-fingerprint] [-rand file...] [-engine id] [-engine_impl] [file...]

dgst函數輸出十六進制的摘要文件,默認的摘要算法是sha256,輸入如下命令查看可選摘要算法

openssl dgst -list

選項說明

  • -digest ——摘要算法名稱

    Supported digests:
    -blake2b512                -blake2s256                -md4                      
    -md5                       -md5-sha1                  -ripemd                   
    -ripemd160                 -rmd160                    -sha1                     
    -sha224                    -sha256                    -sha3-224                 
    -sha3-256                  -sha3-384                  -sha3-512                 
    -sha384                    -sha512                    -sha512-224               
    -sha512-256                -shake128                  -shake256                 
    -sm3                       -ssl3-md5                  -ssl3-sha1                
    -whirlpool
    
  • -help ——查找幫助

  • -c ——當設置了-hex,輸出結果每兩個字符中加一個冒號

  • -d ——打印出BIO調試信息值。

  • -hex ——以十六進輸出結果,二選一

  • -binary ——以二進制輸出結果,二選一

  • -r —— 以sha1sum的“coreutils”格式輸出摘要

  • -non-fips-allow —— 允許在FIPS模式使用非FIPS算法

  • -out filename —— 輸出文件,默認標准輸出

  • -sign filename —— 使用文件中的私鑰簽名

  • -keyform arg —— 私鑰格式,PEM | DER

  • -passin arg —— 私鑰密碼

  • -verify filename ——公鑰驗簽

  • -prverify filename ——私鑰驗簽

  • -signature filename ——簽名文件

  • -hmac key ——hmac 秘鑰

  • -non-fips-allow ——允許在FIPS模式使用非FIPS算法

  • -fips-fingerprint ——在某些openssl-FIPS中使用特殊密鑰計算HMAC

  • -engine id ——指定硬件引擎

  • file ——輸入文件,不指定則為標准輸入

注意事項

  • 所有新應用程序的選擇的摘要算法是SHA1。 然而其他摘要算法仍然被廣泛使用。
  • 在簽名時,dgst將根據私鑰的ASN.1信息自動確定用於簽名的算法(RSA,ECC等)。
    當驗證簽名時,它只處理RSA,DSA或ECDSA簽名本身,而不是分析相關數據來識別簽名者和相關算法,如x.509,CMS和S / MIME的簽名者和算法。
  • 某些簽名算法,特別是ECDSA和DSA需要一個隨機數源
  • 僅當單個文件要簽名或驗證時,才能使用簽名和驗證選項。
  • 十六進制簽名無法使用openssl進行驗證。使用“xxd -r”或類似程序在驗證之前將十六進制簽名轉換為二進制簽名。
  • 在OpenSSL 1.1.0中默認的摘要算法是sha256

示例

//計算摘要
openssl dgst -md5 -hex file.txt
openssl dgst -sh1 -c -hex -out md.sha1 file.txt

//私鑰簽名
openssl dgst -sha256 -sign privatekey.pem -out signature.sign file.txt
//公鑰驗簽
openssl dgst -sha256 -verify publickey.pem -signature signature.sign file.txt

//私鑰簽名
openssl dgst -sign rsa_pri.key -keyform PEM -passin pass:123456 -out rsa_sign.sig file.txt
//私鑰驗簽
openssl dgst -prverify rsa_pri.key -keyform PEM -passin pass:123456 -signature rsa_sign.sig file.txt
//公鑰驗簽
openssl dgst -verify rsa_pub.key -keyform PEM -signature rsa_sign.sig file.txt

//hmac
openssl dgst -hmac rsa_pri.key -keyform PEM -passin pass:123456 -sha1 -out rsa.hmac file.txt

dh、dhparam

dh是Diffie-Hellman參數管理命令,現已被dhparam替代

dhparam命令用於生成和管理Diffie-Hellman參數。

概要

openssl dhparam [-help] [-inform DER|PEM] [-outform DER|PEM] [-in filename] [-out filename] [-dsaparam] [-check] [-noout] [-text] [-C] [-2] [-5] [-rand file...] [-writerand file] [-engine id] [numbits]

選項說明

  • -help ——查找幫助
  • -inform DER|PEM ——輸入文件格式,DER或者PEM格式。DER格式采用ASN1的DER標准格式。一般用的多的都是PEM格式,就是base64編碼格式。
  • -outform DER|PEM ——輸出文件格式,DER或者PEM格式。
  • -in filename ——讀取DH參數的文件,默認為標准輸入。
  • -out filename ——dh參數輸出文件,默認為標准輸出。
  • -dsaparam ——如果本選項被設置,那么無論輸入還是輸入都會當做DSA的參數。它們再被轉化成DH的參數格式。這樣子產生DH參數和DH key都會快很多。會使SSL握手的時間縮短。當然時間是以安全性做犧牲的,所以如果這樣子最好每次使用不同的參數,以免給人破掉你的密鑰值。如果沒有被設置,大素數會被作為DH參數的產生器。
  • -noout ——不打印參數編碼的版本信息。
  • -check ——檢查DH密鑰參數。
  • -text ——打印DH參數信息值。
  • -C ——以C語言風格打印信息。
  • -2、-5 ——指定2或5為發生器,默認為2,如果指定這些項,輸入DH參數文件將被忽略,自動生成DH參數。
  • -rand file(s) ——隨機數產生種子。
  • -engine id ——指定硬件引擎。
  • numbits ——指定素數位數,必須是最后一個參數,默認為512。

注意事項

  • PEM格式的DH密鑰參數用下面的頭部和尾部:

    -----BEGIN DH PARAMETERS-----
    -----END DH PARAMETERS-----
    
  • OpenSSL目前僅僅支持老版本的PKCS#3格式的DH,不是最新的X9.42DH。

  • 這個命令操作的是DH參數而不是key。

BUGS

  • 應該使用其他的命令生成和操作DH的key。

示例

//生成DH參數
openssl dhparam -2 -out dhparam.pem -text 1024

通過vim dhparam.pem可以查看這個文件

    DH Parameters: (1024 bit)
        prime:
            00:ca:4a:ac:a4:ad:c3:9f:6c:08:dd:cb:00:bd:79:
            47:b9:3e:53:e1:6e:38:2d:fb:47:10:e0:d9:d3:16:
            82:b4:dc:33:5f:32:a6:b7:20:b6:1a:f3:1c:67:ec:
            5a:ab:3d:cf:42:61:6e:a1:a2:ea:a1:19:55:d8:54:
            0c:cd:cc:1d:ea:70:ca:a9:4d:a5:b3:ea:7c:19:54:
            40:dc:a8:67:06:57:32:94:96:d9:ec:97:f3:ff:df:
            8a:5f:69:7c:9e:a3:02:73:ad:42:7a:c5:b3:3f:10:
            5d:e3:11:b2:50:e8:b4:98:1f:a3:c1:46:be:f5:3c:
            b5:ee:ec:7e:3e:ba:13:f3:fb
        generator: 2 (0x2)
-----BEGIN DH PARAMETERS-----
MIGHAoGBAMpKrKStw59sCN3LAL15R7k+U+FuOC37RxDg2dMWgrTcM18yprcgthrz
HGfsWqs9z0JhbqGi6qEZVdhUDM3MHepwyqlNpbPqfBlUQNyoZwZXMpSW2eyX8//f
il9pfJ6jAnOtQnrFsz8QXeMRslDotJgfo8FGvvU8te7sfj66E/P7AgEC
-----END DH PARAMETERS-----
//檢查生成的DH參數
openssl dhparam -in dhparam.pem -check

enc

這是一個對稱加密算法工具。能夠運用多種塊密碼算法或者流密碼算法對數據進行加密解密,還可以對明文和密文進行base64的編碼和解碼。

概要

openssl enc -cipher [-help] [-list] [-ciphers] [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a] [-base64] [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md digest] [-iter count] [-pbkdf2] [-p] [-P] [-bufsize number] [-nopad] [-debug] [-none] [-rand file...] [-writerand file] [-engine id]

輸入如下命令可以查看可選加解密算法:

openssl enc -list

選項說明

  • -ciphername ——對稱算法名稱

    Supported ciphers:
    -aes-128-cbc               -aes-128-cfb               -aes-128-cfb1             
    -aes-128-cfb8              -aes-128-ctr               -aes-128-ecb              
    -aes-128-ofb               -aes-192-cbc               -aes-192-cfb              
    -aes-192-cfb1              -aes-192-cfb8              -aes-192-ctr              
    -aes-192-ecb               -aes-192-ofb               -aes-256-cbc              
    -aes-256-cfb               -aes-256-cfb1              -aes-256-cfb8             
    -aes-256-ctr               -aes-256-ecb               -aes-256-ofb              
    -aes128                    -aes128-wrap               -aes192                   
    -aes192-wrap               -aes256                    -aes256-wrap              
    -aria-128-cbc              -aria-128-cfb              -aria-128-cfb1            
    -aria-128-cfb8             -aria-128-ctr              -aria-128-ecb             
    -aria-128-ofb              -aria-192-cbc              -aria-192-cfb             
    -aria-192-cfb1             -aria-192-cfb8             -aria-192-ctr             
    -aria-192-ecb              -aria-192-ofb              -aria-256-cbc             
    -aria-256-cfb              -aria-256-cfb1             -aria-256-cfb8            
    -aria-256-ctr              -aria-256-ecb              -aria-256-ofb             
    -aria128                   -aria192                   -aria256                  
    -bf                        -bf-cbc                    -bf-cfb                   
    -bf-ecb                    -bf-ofb                    -blowfish                 
    -camellia-128-cbc          -camellia-128-cfb          -camellia-128-cfb1        
    -camellia-128-cfb8         -camellia-128-ctr          -camellia-128-ecb         
    -camellia-128-ofb          -camellia-192-cbc          -camellia-192-cfb         
    -camellia-192-cfb1         -camellia-192-cfb8         -camellia-192-ctr         
    -camellia-192-ecb          -camellia-192-ofb          -camellia-256-cbc         
    -camellia-256-cfb          -camellia-256-cfb1         -camellia-256-cfb8        
    -camellia-256-ctr          -camellia-256-ecb          -camellia-256-ofb         
    -camellia128               -camellia192               -camellia256              
    -cast                      -cast-cbc                  -cast5-cbc                
    -cast5-cfb                 -cast5-ecb                 -cast5-ofb                
    -chacha20                  -des                       -des-cbc                  
    -des-cfb                   -des-cfb1                  -des-cfb8                 
    -des-ecb                   -des-ede                   -des-ede-cbc              
    -des-ede-cfb               -des-ede-ecb               -des-ede-ofb              
    -des-ede3                  -des-ede3-cbc              -des-ede3-cfb             
    -des-ede3-cfb1             -des-ede3-cfb8             -des-ede3-ecb             
    -des-ede3-ofb              -des-ofb                   -des3                     
    -des3-wrap                 -desx                      -desx-cbc                 
    -id-aes128-wrap            -id-aes128-wrap-pad        -id-aes192-wrap           
    -id-aes192-wrap-pad        -id-aes256-wrap            -id-aes256-wrap-pad       
    -id-smime-alg-CMS3DESwrap  -rc2                       -rc2-128                  
    -rc2-40                    -rc2-40-cbc                -rc2-64                   
    -rc2-64-cbc                -rc2-cbc                   -rc2-cfb                  
    -rc2-ecb                   -rc2-ofb                   -rc4                      
    -rc4-40                    -seed                      -seed-cbc                 
    -seed-cfb                  -seed-ecb                  -seed-ofb                 
    -sm4                       -sm4-cbc                   -sm4-cfb                  
    -sm4-ctr                   -sm4-ecb                   -sm4-ofb                  
    
  • -in filename —— 輸入文件

  • -out filename ——輸出文件,省略則為標准輸出

  • -pass arg —— 口令設置,用於沒有提供密鑰時,采用摘要算法從口令中生成一個密鑰,如果加密時使用了口令,則解密也要使用口令,arg如下所示:

    -pass pass:"123"      #密碼是123  
    -pass pass:123        #密碼是123  
    -pass evn:VAR         #密碼從環境變量VAR中去  
    -pass file:p.txt      #密碼從文件p.txt第一行取,不包括換行符,注意DOS格式的^M及回車符。  
    -pass fd:3            #密碼從文件描述符3中讀  
    -pass stdin           #標准輸入123456
    
  • -e —— 加密,二選一

  • -d —— 解密,二選一

  • -a/-base64 —— 加密時設置結果以base64編碼,,解密時設置輸入為base64

  • -A ——加密時設置結果以base64編碼成一行,解密時設置輸入為一行base64

  • -k password —— 口令,已經被-pass代替,二選一

  • -kfile filename —— 口令文件 已經被-pass代替,二選一

  • -K key —— 加密秘鑰,16進制

  • -iv IV ——初始向量,16進制

  • -S salt ——指定16進制鹽值

  • -salt ——帶有隨機鹽值 二選一

  • -nosalt ——不帶鹽值,已經關閉此選項,二選一

  • -z ——是否壓縮,需要編譯時選擇了zlib庫

  • -md digstname —— 摘要算法,當沒有提供密鑰時候,用於從口令中生成一個密鑰,默認md5

  • -p ——打印出使用的salt、口令以及初始化向量IV。二選一

  • -P ——打印出使用的salt、口令以及初始化向量IV。不做加解密,二選一

  • -bufsize number ——緩沖區大小

  • -nopad ——無填充

  • -debug ——打印調試信息

  • -none ——不執行加 解密

  • -engine id ——引擎

注意事項

  • 該程序可以通過openssl ciphername或者openssl enc -ciphername 兩種方式調用,但是前一種不支持引擎加密.
  • 應在配置文件中配置提供全新加密算法的引擎(如提供gost89算法的ccgost引擎)。在命令行中使用-engine選項指定的引擎只能用於由配置文件中指定的OpenSSL內核或其他引擎支持的密碼的硬件輔助實現。
  • 當enc命令列出支持的加密算法時,也列出了配置文件中指定的引擎提供的算法。
  • 如果需要,將提示輸入密鑰以獲得密鑰。
  • 如果從密碼派生密鑰,則應使用-salt選項,除非您希望與以前版本的OpenSSL和SSLeay兼容。沒有-salt選項,可以對密碼執行有效的字典攻擊,並攻擊流密碼加密數據。原因是沒有slat,相同的密碼總是生成相同的加密密鑰。當slat被使用時,加密數據的前八個字節被保留給鹽:它在加密文件時被隨機生成,並且在被解密時從加密文件讀取。
  • 一些密碼沒有大的密鑰,如果不正確使用,會帶來安全隱患。建議初學者在CBC模式下使用強分組密碼,如bf或des3。
  • 所有塊密碼通常使用PKCS#5填充也稱為標准塊填充:這允許執行基本的完整性或密碼檢查。然而,由於隨機數據通過測試的機會優於256中的1,這不是一個非常好的測試。
  • 如果禁止填充,則輸入數據必須是密碼塊長度的倍數。
  • 所有RC2密碼具有相同的密鑰和有效的密鑰長度。
  • Blowfish和RC5算法使用128位密鑰。

示例

//將一個二進制文件轉換為base64編碼的文件
openssl base64 -in file.bin -out file.b64
//將這個base64編碼的文件解碼原來的二進制文件
openssl base64 -d -in file.b64 -out file.bin

//以AES-128算法使用一個口令和派生的PBKDF2密鑰加密一個文件
openssl enc -aes128 -pbkdf2 -in file.txt -out file.aes128
//以AES-128算法使用同樣的口令解密剛才的文件
openssl enc -aes128 -pbkdf2 -d -in file.aes128 -out file.txt -pass pass:<password>

//以AES-256-ctr算法使用一個口令和派生的PBKDF2密鑰加密一個文件並用Base64編碼
openssl enc -aes-256-ctr -pbkdf2 -a -in file.txt -out file.aes256
//用Base64解碼剛剛那個文件並用同樣的算法和口令解密
openssl enc -aes-256-ctr -pbkdf2 -d -a -in file.aes256 -out file.txt -pass file:<passfile>

//加入-k和-iv參數
//加密(提供密鑰)
openssl enc -aes-128-cbc -e -K 000 -iv 000 -in test.txt -out test.cipher  -a -A  -p
//解密
openssl enc -aes-128-cbc -d -K 000 -iv 000 -in test.ciphet -a -A  -out test.plain   -p

//加鹽
//加密(提供口令)
openssl enc -aes-128-cbc -e  -pass pass:123456 -S a1bec3d4e5f6 -salt -md sha1 -iv 000 in test.txt -out test.cipher  -a -A  -p
//解密
openssl enc -aes-128-cbc -d  -pass pass:123456 -S a1bec3d4e5f6 -salt -md sha1 -iv 000 in test.cipher -out test.plain  -a -A  -p

BUGS

  • -A選項在遇到大文件時將不會起作用
  • enc命令只支持它本身提供的具有固定數字參數的算法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM