登入  |  English
感謝您對「自由軟體鑄造場」的支持與愛護,十多年來「自由軟體鑄造場」受中央研究院支持,並在資訊科學研究所以及資訊科技創新研究中心執行,現已完成階段性的任務。 原網站預計持續維運至 2021年底,網站內容基本上不會再更動。本網站由 Denny Huang 備份封存。
也紀念我們永遠的朋友 李士傑先生(Shih-Chieh Ilya Li)。
技術專欄 開放源碼的安全演算法工具: OpenSSL (2) - 對稱式加解密演算法

開放源碼的安全演算法工具: OpenSSL (2) - 對稱式加解密演算法

前言

OpenSSL 提供了完整安全通信所需的編碼工具,諸如雜湊演算法 (Hash algorithms)、加解密演算法 (Encryption/Decryption algorithms) 及 SSL / TLS 協議的實現等。加上其開放源碼的特性,使得許多開源專案或商業套件都有其踪跡。OpenSSL 除了提供程式 API 擴充接口外,也有命令列模式的操作。
本專案主要使用 C 程式語言撰寫,於 Windows/Linux/BSD/MacOS 下皆可運行。
本篇文章為 OpenSSL 系列文章第二篇。常見的加解密演算法分為對稱式與非對稱式,有興趣的使用者,可以在網路上搜尋相關的文章。本章節將介紹 OpenSSL 在對稱式加解密演算法上的運用。本篇將著重於命令列模式下的對稱式加解密演算法的操作。

列出 OpenSSL 提供的對稱式加解密演算法

請使用 "enc -h" 為其參數:
    $ openssl enc -h
    unknown option '-h'
    options are
    -in     input file
    -out    output file
    -pass    pass phrase source
    -e             encrypt
    -d             decrypt
    -a/-base64     base64 encode/decode, depending on encryption flag
    -k             passphrase is the next argument
    -kfile         passphrase is the first line of the file argument
    -md            the next argument is the md to use to create a key
                     from a passphrase.  One of md2, md5, sha or sha1
    -K/-iv         key/iv in hex is the next argument
    -[pP]          print the iv/key (then exit if -P)
    -bufsize   buffer size
    -engine e      use engine e, possibly a hardware device.
    Cipher Types
    -aes-128-cbc               -aes-128-cfb               -aes-128-cfb1
    -aes-128-cfb8              -aes-128-ecb               -aes-128-ofb
    -aes-192-cbc               -aes-192-cfb               -aes-192-cfb1
    -aes-192-cfb8              -aes-192-ecb               -aes-192-ofb
    -aes-256-cbc               -aes-256-cfb               -aes-256-cfb1
    -aes-256-cfb8              -aes-256-ecb               -aes-256-ofb
    -aes128                    -aes192                    -aes256
    -bf                        -bf-cbc                    -bf-cfb
    -bf-ecb                    -bf-ofb                    -blowfish
    -cast                      -cast-cbc                  -cast5-cbc
    -cast5-cfb                 -cast5-ecb                 -cast5-ofb
    -des                       -des-cbc                   -des-cfb
    -des-cfb1                  -des-cfb8                  -des-ecb
    -des-ede                   -des-ede-cbc               -des-ede-cfb
    -des-ede-ofb               -des-ede3                  -des-ede3-cbc
    -des-ede3-cfb              -des-ede3-cfb1             -des-ede3-cfb8
    -des-ede3-ofb              -des-ofb                   -des3
    -desx                      -desx-cbc                  -rc2
    -rc2-40-cbc                -rc2-64-cbc                -rc2-cbc
    -rc2-cfb                   -rc2-ecb                   -rc2-ofb
    -rc4                       -rc4-40
從列表中得知,OpenSSL 支援 AES, DES, Blowfish(bf) 及 RC4 演算法等。
另外,雖然上例使用 "-h" 為其參數,但是這個參數在 OpenSSL 是不支援的。使用其它非內建的參數,亦有相同的效果。

使用 OpenSSL 的 DES 加解密演算法

01.加密檔案

請使用 "des" 為其參數,隨後附上 "-in" 參數指定欲加密的檔案,以及 "-out" 參數指定加密後的檔案名稱:
    $ openssl des -in file -out file.des
執行後,OpenSSL 會提示使用者由鍵盤上輸入加密之密碼,如下:
    enter des-cbc encryption password:
需要注意的是,為了安全性,此時不管鍵盤輸入什麼,畫面上都不會出現任何字元,否則若旁人經過時,可能會故意或不經意的記下你的密碼。直到輸入完成後,按下鍵盤上的 "Enter" 鍵即可。
OpenSSL 會再一次要求使用者輸入一次相同的密碼,如下:
    Verifying - enter des-cbc encryption password:
此時使用者只需要輸入與先前一樣的密碼即可,在輸入過程中畫面上一樣都不會出現任何字元。最後加密的檔案將以 file.des 的名稱存在於磁碟中。

02.解密檔案

請使用 "des" 為其參數,因為 OpenSSL 指令預設為加密,所以若要切換成解密則需要再加上 "-d" (decrypt) 的參數,隨後附上 "-in" 參數指定欲加密的檔案,以及 "-out" 參數指定加密後的檔案名稱:
    $ openssl des -d -in file.des -out file
執行後,OpenSSL 會提示使用者由鍵盤上輸入加密之密碼,如下:
    enter des-cbc encryption password:
需要注意的是,為了安全性,此時不管鍵盤輸入什麼,畫面上都不會出現任何字元,否則若旁人經過時,可能會故意或不經意的記下你的密碼。直到輸入完成後,按下鍵盤上的 "Enter" 鍵即可。
此時若使用者輸入了正確的密碼,就會成功將 file.des 解密之檔案,以 file 的檔案名稱存在於磁碟上。

使用 OpenSSL 的 Triple DES 加解密演算法

01.加密檔案

請使用 "des3" 為其參數,隨後附上 "-in" 參數指定欲加密的檔案,以及 "-out" 參數指定加密後的檔案名稱:
    $ openssl des3 -in file -out file.des3
執行後,OpenSSL 會提示使用者由鍵盤上輸入加密之密碼,如下:
    enter des-ede3-cbc encryption password:
需要注意的是,為了安全性,此時不管鍵盤輸入什麼,畫面上都不會出現任何字元,否則若旁人經過時,可能會故意或不經意的記下你的密碼。直到輸入完成後,按下鍵盤上的 "Enter" 鍵即可。
OpenSSL 會再一次要求使用者輸入一次相同的密碼,如下:
    Verifying - enter des-ede3-cbc encryption password:
此時使用者只需要輸入與先前一樣的密碼即可,在輸入過程中畫面上一樣都不會出現任何字元。最後加密的檔案將以 file.des3 的名稱存在於磁碟中。

02.解密檔案

請使用 "des3" 為其參數,因為 OpenSSL 指令預設為加密,所以若要切換成解密則需要再加上 "-d" (decrypt) 的參數,隨後附上 "-in" 參數指定欲加密的檔案,以及 "-out" 參數指定加密後的檔案名稱:
    $ openssl des3 -d -in file.des3 -out file
執行後,OpenSSL 會提示使用者由鍵盤上輸入加密之密碼,如下:
    enter des-ede3-cbc encryption password:
需要注意的是,為了安全性,此時不管鍵盤輸入什麼,畫面上都不會出現任何字元,否則若旁人經過時,可能會故意或不經意的記下你的密碼。直到輸入完成後,按下鍵盤上的 "Enter" 鍵即可。
此時若使用者輸入了正確的密碼,就會成功將 file.des3 解密之檔案,以 file 的檔案名稱存在於磁碟上。

使用 OpenSSL 的 AES 加解密演算法

本範例將使用 AES-256-CBC 的模式進行操作。

01.加密檔案

請使用 "aes-256-cbc" 為其參數,隨後附上 "-in" 參數指定欲加密的檔案,以及 "-out" 參數指定加密後的檔案名稱:
    $ openssl aes-256-cbc -in file -out file.aes
執行後,OpenSSL 會提示使用者由鍵盤上輸入加密之密碼,如下:
    enter aes-256-cbc encryption password:
需要注意的是,為了安全性,此時不管鍵盤輸入什麼,畫面上都不會出現任何字元,否則若旁人經過時,可能會故意或不經意的記下你的密碼。直到輸入完成後,按下鍵盤上的 "Enter" 鍵即可。
OpenSSL 會再一次要求使用者輸入一次相同的密碼,如下:
    Verifying - enter aes-256-cbc encryption password:
此時使用者只需要輸入與先前一樣的密碼即可,在輸入過程中畫面上一樣都不會出現任何字元。最後加密的檔案將以 file.aes 的名稱存在於磁碟中。

02.解密檔案

請使用 "aes-256-cbc" 為其參數,因為 OpenSSL 指令預設為加密,所以若要切換成解密則需要再加上 "-d" (decrypt) 的參數,隨後附上 "-in" 參數指定欲加密的檔案,以及 "-out" 參數指定加密後的檔案名稱:
    $ openssl aes-256-cbc -d -in file.aes -out file
執行後,OpenSSL 會提示使用者由鍵盤上輸入加密之密碼,如下:
    enter aes-256-cbc encryption password:
需要注意的是,為了安全性,此時不管鍵盤輸入什麼,畫面上都不會出現任何字元,否則若旁人經過時,可能會故意或不經意的記下你的密碼。直到輸入完成後,按下鍵盤上的 "Enter" 鍵即可。
此時若使用者輸入了正確的密碼,就會成功將 file.aes 解密之檔案,以 file 的檔案名稱存在於磁碟上。

結語

本篇範例介紹了幾種常見對稱式加解密檔案的操作。在下一篇文章中,將介紹 OpenSSL 的非對稱式加解密演算法的操作。


您也許有興趣閱讀以下文章:




自由軟體鑄造場電子報 : 第 191 期 開放源碼的安全演算法工具︰OpenSSL(2)- 對稱式加解密演算法
標籤: OpenSSL,   Symmetric Encryption and Decryption Algorithms,   Hash algorithms,  
分類: 技術專欄



評論 

 
0 #1 borislv 2013-04-05 09:28
解密的部份似乎有誤