1 前言
面對 MD5
、SHA
娇唯、DES
齐遵、AES
、RSA
等等這些名詞你是否有很多問號塔插?
這些名詞都是什么梗摇?
還有什么公鑰加密、私鑰解密想许、私鑰加簽伶授、公鑰驗簽断序。
這些都什么鬼?
或許在你日常工作沒有聽說過這些名詞糜烹,但是一旦你要設計一個對外訪問的接口逢倍,或者安全性要求高的系統(tǒng),那么必然會接觸到這些名詞景图。所以加解密较雕、加簽驗簽對于一個合格的程序員來說是必須要掌握的一個概念。
接下來我們就一文徹底搞懂這些概念挚币。
2 沒有硝煙的戰(zhàn)場——淺談密碼技術
沒有根基也許可以建一座小屋亮蒋,但絕對不能造一座堅固的大廈。
密碼這個詞有很多種的解釋妆毕,在現代社會如果不接觸編程的話慎玖,那么普遍的認為是我們設置的登錄密碼、或者是去銀行取錢時輸入的數字笛粘。都是我們在注冊時實現給提供服務的一方存儲一組數字趁怔,以后我們登錄的時候就用這組數字相當于就證明了我們的身份。這個數字通常來說就是叫做密碼薪前。
而我們需要了解的不是上面說的密碼润努,而是一種“密碼術”,就是對于要傳遞的信息按照某種規(guī)則進行轉換示括,從而隱藏信息的內容铺浇。這種方法可以使機密信息得以在公開的渠道傳遞而不泄密。使用這種方法垛膝,要經過加密過程鳍侣。在加密過程中我們需要知道下面的這些概念:
原文:或者叫明文,就是被隱藏的文字加密法:指隱藏原文的法則密文:或者叫偽文吼拥,指對原文按照加密法處理過后生成的可公開傳遞的文字 密鑰:在加密法中起決定性的因素倚聚,可能是數字、詞匯凿可,也可能是一些字母惑折,或者這些東西的組合
加密的結果生成了密文,要想讓接受者能夠讀懂這些密文矿酵,那么就要把加密法以及密鑰告訴接受者唬复,否者接受者無法對密文解密矗积,也就無法讀懂原文全肮。
從歷史的角度來看,密碼學大概可以分為古典密碼學和近現代密碼學兩個階段棘捣。兩者以現代信息技術的誕生為分界點辜腺,現在所討論的密碼學多指的是后者,建立在信息論和數學成果基礎之上的。
2.1 古典密碼學
古典密碼學源自于數千年前评疗,最早在公元前 1900 年左右的古埃及测砂,就出現了通過使用特殊字符和簡單替換式密碼來保護信息。美索不達米亞平原上曾經出土一個公元前 1500 年左右的泥板百匆,其上記錄了加密描述的陶瓷器上釉的工藝配方砌些。古希臘時期(公元前 800 ﹣前 146 年)還發(fā)明了通過物理手段來隱藏信息的“隱寫術”,例如使用牛奶書寫加匈、用蠟覆蓋文字等存璃。
后來在古羅馬時期還出現了基于替換加密的凱撒密碼,據稱凱撒曾用此方法與其部下通信而得以命名雕拼。這些手段多數是采用簡單的機械工具來保護秘密纵东,在今天看來毫無疑問是十分簡陋,很容易猜出來的啥寇。嚴格來看偎球,可能都很難稱為密碼科學。
凱撒密碼是當偏移量是3的時候辑甜,所有的字母都A都將被替換成 D衰絮,B 變成 E,以此類推磷醋。
2.2 近代密碼學
近代密碼學的研究來自于第一岂傲、二次世界大戰(zhàn)中對于軍事通信進行保護和猜出來的需求。1901 年 12 月子檀,意大利的工程師 Guglielmo Marconi(奎里亞摩?馬可尼)成功完成了跨越大西洋的無線電通信的實驗镊掖,在全球范圍內引發(fā)轟動,推動了無線電通信時代的到來褂痰。無線電大大提高了遠程通信的能力亩进,但是它有一個天然的缺陷——很難限制接收方,這就意味著你所傳的信息有可能被攔截缩歪,因此就催生了加密技術的發(fā)展归薛。
對于無線電信息進行加密和解密也直接促進了近現代密碼學和計算機技術的出現。反過來這些科技進步也影響了時代的發(fā)展匪蝙。一戰(zhàn)時期德國外交部長 Arthur Zimmermann(阿瑟?齊默爾曼)拉攏墨西哥構成抗美軍事同盟的電報( 1917 年 1 月 16 日)被英國情報機構— 40 號辦公室破譯主籍,直接導致了美國的參戰(zhàn);二戰(zhàn)時期德國使用的恩尼格瑪(Enigma)密碼機(當時最先進的加密設備)被盟軍成功破譯( 1939 年到 1941 年)逛球,導致大西洋戰(zhàn)役德國失敗千元。據稱,二戰(zhàn)時期光英國從事密碼學研究的人員就達到 7000 人颤绕,而他們的成果使二戰(zhàn)結束的時間至少提前了一到兩年時間幸海。
接下來就是可以稱之為是密碼學發(fā)展史上里程碑的事件了祟身。1945 年 9 月 1 日,Claude Elwood Shannon(克勞德?艾爾伍德?香農)完成了劃時代的內部報告《A Mathematical Theory of Cryptography(密碼術的一個數學理論)》物独,1949 年 10 月袜硫,該報告以《Communication Theory of Secrecy Systems(保密系統(tǒng)的通信理論)》為題在 Bell System Technical Journal(貝爾系統(tǒng)技術期刊)上正式發(fā)表。這篇論文首次將密碼學和信息論聯系到一起挡篓,為對稱密碼技術 提供了數學基礎婉陷。這也標志著近現代密碼學的正式建立。這也是密碼學發(fā)展史上的第一座里程碑性事件官研。
密碼學發(fā)展史上的第二個里程碑性事件是 DES
的出現憨攒。DES
全稱為 Data Encryption Standard
,即數據加密標準阀参,是一種使用密鑰加密的分組密碼算法肝集,1977年被美國聯邦政府的國家標準局確定為聯邦資料處理標準(FIPS),并授權在非密級政府通信中使用蛛壳,隨后該算法在國際上廣泛流傳開來杏瞻。
密碼學發(fā)展史上的第三個里程碑性事件就是我們區(qū)塊鏈中廣泛應用的公鑰密碼,也就是非對稱密碼算法 的出現衙荐。1976年11月捞挥,Whitfield Diffie 和 Martin E.Hellman 在 IEEE Transactions on Information Theory 上發(fā)表了論文《New Directions in Cryptography(密碼學的新方向)》,探討了無需傳輸密鑰的保密通信和簽名認證體系問題忧吟,正式開創(chuàng)了現代公鑰密碼學體系的研究砌函。
在公鑰密碼發(fā)現以前,如果需要保密通信溜族,通信雙方事先要對加解密的算法以及要使用的密鑰進行事先協商讹俊,包括送雞毛信,實際上是在傳送密鑰煌抒。但自從有了公鑰密碼仍劈,需要進行秘密通信的雙方不再需要進行事前的密鑰協商了。公鑰密碼在理論上是不保密的寡壮,在實際上是保密的贩疙。也就是說,公鑰密碼是可以猜出來的况既,但需要極長的時間这溅,等到猜出來了,這個秘密也沒有保密的必要了棒仍。
上面我們說到了關于近現代的密碼學相關的東西悲靴,基本上總結下來我們現在常用的就兩個,一個是對稱加密算法降狠,一個是非對稱加密算法对竣。那么接下來我們就以介紹這兩個概念為主線引出開題中我們提到的概念。
3 程序實現
3.1 對稱加密算法
對稱加密指的就是加密和解密使用同一個秘鑰榜配,所以叫做對稱加密否纬。對稱加密只有一個秘鑰,作為私鑰蛋褥。具體的算法有:DES
临燃、3DES
、TDEA
烙心、Blowfish
膜廊,RC5
,IDEA
淫茵。但是我們常見的有:DES
爪瓜、AES
等等。
那么對稱加密的優(yōu)點是什么呢匙瘪?算法公開铆铆、計算量小、加密速度快丹喻、加密效率高薄货。
缺點就是秘鑰的管理和分發(fā)是非常困難的,不夠安全碍论。
在數據傳送前谅猾,發(fā)送方和接收方必須商定好秘鑰,然后雙方都必須要保存好秘鑰鳍悠,如果一方的秘鑰被泄露了税娜,那么加密的信息也就不安全了。另外藏研,每對用戶每次使用對稱加密算法時巧涧,都需要使用其他人不知道的唯一秘鑰,這會使得收遥倦、發(fā)雙方所擁有的的鑰匙數量巨大谤绳,秘鑰管理也會成為雙方的負擔。
加密的過程我們可以理解為如下:
- 加密:原文+秘鑰 = 密文
- 解密:密文-秘鑰 = 原文 可以看到兩次過程使用的都是一個秘鑰袒哥。用圖簡單表示如下:
3.2 實戰(zhàn)演練
既然我們知道關于對稱加密算法的相關知識缩筛,那么我們日常用Java如何實現對稱加密的加密和解密動作呢?常見的對稱加密算法有:DES堡称、AES等瞎抛。
3.2.1 DES
DES加密算法是一種分組密碼,以64位為分組對數據加密却紧,它的密鑰長度是56位桐臊,加密解密用同一算法胎撤。DES加密算法是對密鑰進行保密,而公開算法断凶,包括加密和解密算法伤提。這樣,只有掌握了和發(fā)送方相同密鑰的人才能解讀由DES加密算法加密的密文數據认烁。因此肿男,破譯DES加密算法實際上就是搜索密鑰的編碼。對于56位長度的密鑰來說却嗡,如果用窮舉法來進行搜索的話舶沛,其運算次數為2的56次方。
接下來用Java實現DES加密