日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

openssl enc 加解密

發布時間:2024/3/24 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 加解密的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。