生活随笔
收集整理的這篇文章主要介紹了
openssl enc 加解密
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
介紹
enc - 對稱加密例程,使用對稱密鑰對數據進行加解密,特點是速度快,能對大量數據進行處理。算法有流算法和分組加密算法,流算法是逐字節加密,數據經典算法,但由于其容易被破譯,現在已很少使用;分組加密算法是將數據分成固定大小的組里,然后逐組進行加密,比較廣為人知的是DES3。分組算法中又有ECB,CBC,CFB,OFB,CTR等工作模式,其中默認選CBC工作模式。
語法
openssl enc -ciphername[-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] [-p] [-P] [-bufsize number] [-nopad] [-debug] [-none] [-engine id]
enc?主命令,雖然直接調用加密算法名字也行,例如:
?
openssl?des3?-pass?pass:"123"?-in?a.txt?-out?a.txt.des3??
但是不推薦使用,理由是這種調用形式對于需要硬件引擎的算法不能正常工作(算法,可以由硬件完成)。
?
-in / -out?? filename ?? 輸入待加解密的文件,輸出加解密后的文件
-pass?arg
-pass 提供了幾種傳入密碼的方式。傳統是利用-k 選項傳入密碼的。(關于環境變量,文件描述符,請參閱相關文獻)
?
-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???????????#標準輸入?? -salt???? 加鹽,這是開啟的默認選項,使用-nosalt已明確關閉此選項,除非為了兼容性的考慮,否則在新程序中請使用此選項。這是一個神奇的選項,加鹽后,相同的明文可以得到不同的密文。默認情況下,鹽值是隨機生成的,可以使用-S選項明確指定鹽值。
E:\OpenSSL\foo>openssl?enc?-P?-des3?-pass?pass:123??-in?a.txt??salt=669E2AB46DA79FA0??key=EFDB3D1EF18840FF7961E5346FCED81CD34D89286A106F71??iv?=2FBE944B72F3CA59????E:\OpenSSL\foo>openssl?enc?-P?-des3?-pass?pass:123??-in?a.txt??salt=2D89EA80CDE7700E??key=825A74419BADD6A82D6DD9ECD9404397EB5AFC020A75D511??iv?=152185CA47D212A0?? ?
有了鹽值后,相同的明文可以產生不同的密文,那可以解密嗎?當然可以。在密文中包含了鹽值。例如:
?
E:\OpenSSL\foo>openssl?enc?-p?-des3?-pass?pass:123??-in?a.txt?-out?a.des3salt??salt=A254906CA471C1D4??key=15A12DB86A8A09ABB3C59C1712D865447D96AD1BC940CA56??iv?=264E495D7649F9F8????E:\OpenSSL\foo>xxd?a.des3salt??0000000:?5361?6c74?6564?5f5f?a254?906c?a471?c1d4??Salted__.T.l.q..??0000010:?952e?1995?b60d?1813??????????????????????........??
注意salt和a.des3salt中的a254 906c a471 c1d4是一樣子的。我以前用POCO寫了個加密程序,加密了一個文件,然后又用openssl加密了那個相同的文件,結果加密后的文件不一樣,原來是鹽值在搞怪。加鹽,就是加調料,所以結果不一樣了。
?
?
?
鹽值(salt)不需要保密,為什么,看看《應用密碼學》吧。
?
-e / -d???????? encrypt / decrypt 加解密。默認是加密,-d明確指定是解密。
?
E:\OpenSSL\foo>openssl?enc?-d?-des3?-pass?pass:123??-in?a.des3salt?-out?a.dec????E:\OpenSSL\foo>diff?a.txt?a.dec????E:\OpenSSL\foo>??
-a????????????? 對加密后的數據進行base64編碼,或解密前,先對數據進行base64解碼。?-base64與-a選項相同。
?
?
E:\OpenSSL\foo>openssl?enc?-des3?-a?-k?123?-in?a.txt?-out?a.des3base64????E:\OpenSSL\foo>openssl?enc?-des3?-d?-a?-k?123?-in?a.des3base64?-out?b.txt????E:\OpenSSL\foo>diff?a.txt?b.txt??
-A????????????? 如果指定-a 選項,在每一行上進行base64處理。
?
-k /? -kfile???? -k,傳統輸入密碼的方式,-k 123 相當與 -pass pass:123 。-kfile p.txt 相當于 -pass file:p.txt。
-K? key???? 加密真正使用的key。這和-k 和 -pass有什么區別呢? 其實我們輸入的密碼并不是加密時使用的密鑰,對于分組加密算法來說,密鑰是固定的,有64/128/256等,我們也經常見文獻里寫著,密鑰多少多少位。我們輸入的密碼,在加密算法啟動前,會經過運算,得到固定長度用于加密的key,然后在加密。我們可以在選項中手動指定key,key的格式是16進制,算法的不同,key的長度也會不同。
-iv?IV????? IV是初始化向量,格式是16進制。在分組加密算法中,對第一組數據加密時,我們可以是用初始化向量對其進行處理,已隱藏明文的統計特性。參加下面的工作模式。
-p / -P??? print打印出key和iv值。-P只打印出key和iv值,而不進行加解密運算。參考-salt
?
算法
除了上面提到的des3外,openssl還提供了那些算法呢?
?
E:\OpenSSL\foo>openssl?enc?-help?? 這里是官方文檔,做的整理
?
base64?????????????Base?64????bf-cbc?????????????Blowfish?in?CBC?mode??bf?????????????????Alias?for?bf-cbc??bf-cfb?????????????Blowfish?in?CFB?mode??bf-ecb?????????????Blowfish?in?ECB?mode??bf-ofb?????????????Blowfish?in?OFB?mode????cast-cbc???????????CAST?in?CBC?mode??cast???????????????Alias?for?cast-cbc??cast5-cbc??????????CAST5?in?CBC?mode??cast5-cfb??????????CAST5?in?CFB?mode??cast5-ecb??????????CAST5?in?ECB?mode??cast5-ofb??????????CAST5?in?OFB?mode????des-cbc????????????DES?in?CBC?mode??des????????????????Alias?for?des-cbc??des-cfb????????????DES?in?CBC?mode??des-ofb????????????DES?in?OFB?mode??des-ecb????????????DES?in?ECB?mode????des-ede-cbc????????Two?key?triple?DES?EDE?in?CBC?mode??des-ede????????????Two?key?triple?DES?EDE?in?ECB?mode??des-ede-cfb????????Two?key?triple?DES?EDE?in?CFB?mode??des-ede-ofb????????Two?key?triple?DES?EDE?in?OFB?mode????des-ede3-cbc???????Three?key?triple?DES?EDE?in?CBC?mode??des-ede3???????????Three?key?triple?DES?EDE?in?ECB?mode??des3???????????????Alias?for?des-ede3-cbc??des-ede3-cfb???????Three?key?triple?DES?EDE?CFB?mode??des-ede3-ofb???????Three?key?triple?DES?EDE?in?OFB?mode????desx???????????????DESX?algorithm.????gost89?????????????GOST?28147-89?in?CFB?mode?(provided?by?ccgost?engine)??gost89-cnt????????`GOST?28147-89?in?CNT?mode?(provided?by?ccgost?engine)????idea-cbc???????????IDEA?algorithm?in?CBC?mode??idea???????????????same?as?idea-cbc??idea-cfb???????????IDEA?in?CFB?mode??idea-ecb???????????IDEA?in?ECB?mode??idea-ofb???????????IDEA?in?OFB?mode????rc2-cbc????????????128?bit?RC2?in?CBC?mode??rc2????????????????Alias?for?rc2-cbc??rc2-cfb????????????128?bit?RC2?in?CFB?mode??rc2-ecb????????????128?bit?RC2?in?ECB?mode??rc2-ofb????????????128?bit?RC2?in?OFB?mode??rc2-64-cbc?????????64?bit?RC2?in?CBC?mode??rc2-40-cbc?????????40?bit?RC2?in?CBC?mode????rc4????????????????128?bit?RC4??rc4-64?????????????64?bit?RC4??rc4-40?????????????40?bit?RC4????rc5-cbc????????????RC5?cipher?in?CBC?mode??rc5????????????????Alias?for?rc5-cbc??rc5-cfb????????????RC5?cipher?in?CFB?mode??rc5-ecb????????????RC5?cipher?in?ECB?mode??rc5-ofb????????????RC5?cipher?in?OFB?mode????aes-[128|192|256]-cbc??128/192/256?bit?AES?in?CBC?mode??aes-[128|192|256]??????Alias?for?aes-[128|192|256]-cbc??aes-[128|192|256]-cfb??128/192/256?bit?AES?in?128?bit?CFB?mode??aes-[128|192|256]-cfb1?128/192/256?bit?AES?in?1?bit?CFB?mode??aes-[128|192|256]-cfb8?128/192/256?bit?AES?in?8?bit?CFB?mode??aes-[128|192|256]-ecb??128/192/256?bit?AES?in?ECB?mode??aes-[128|192|256]-ofb??128/192/256?bit?AES?in?OFB?mode?? 注意上面的ecb,cbc,ofb,cfb等,這些是分組算法的工作模式,默認為cbc。
ECB是最簡單的,如圖
?
CBC是應用最廣泛的,如圖
在加密第一組數據的時候,使用了IV,且每組數據加加密前都與前組加密后的數據進行異或,提高了安全性。不同的IV可以產生不同的密文(這和不同的salt可以產生不同的密文,應該不矛盾,本人菜鳥^_^),這樣明文的統計特征會在密文中消散掉。IV不需要保密。
轉載于:https://www.cnblogs.com/motoyang/p/6407901.html
總結
以上是生活随笔為你收集整理的openssl enc 加解密的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。