開放源碼的安全演算法工具: OpenSSL (2) - 對稱式加解密演算法
建立日期 2012-02-23 09:18 最近更新在 2012-03-27 09:57
作者是 曾義峰
前言
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 的非對稱式加解密演算法的操作。
您也許有興趣閱讀以下文章:
評論