1. 程式人生 > >【修真院JAVA小課堂】什麼叫明文,什麼叫密文,為什麼不允許在資料庫裡明文儲存密碼

【修真院JAVA小課堂】什麼叫明文,什麼叫密文,為什麼不允許在資料庫裡明文儲存密碼

大家好,我是IT修真院深圳分院第十二期學員,一枚正直純潔善良的JAVA程式設計師。

今天給大家分享一下,修真院官網JAVA任務五的一個知識點:什麼叫明文,什麼叫密文,為什麼不允許在資料庫裡明文儲存密碼?

1.背景介紹

2.知識剖析

3.常見問題

4.解決方案

5.編碼實戰

6.擴充套件思考

7.參考文獻      

8.更多討論

1.背景介紹

先來看關鍵字:密碼

用特定法則編成,用以對通訊雙方的資訊進行明密變換的符號(跟「明碼」相區別)。「密碼電報」密碼也是一種用來混淆的技術,使用者希望將正常的(可識別的)資訊轉變為無法識別的資訊。但這種無法識別的資訊部分是可以再加工並恢復和破解的。密碼在中文裡是“口令”(password)的通稱。

2.知識剖析

2.1. 明文密碼
“明文密碼”(Cleartext Password),即傳輸或儲存為明文的密碼。具體是指儲存密碼或網路傳送密碼的時候,用的是沒有隱藏、直接顯示的明文字元,而不是經過加密後的密文。如密碼為123,那麼密文密碼是***,明文密碼則是123。從資訊保安的角度出發,任何網路服務都不應該儲存或傳送明文密碼。


2.2 .密文密碼
密文是加了密的的文字,明文是加密之前的文字。密文是對明文進行加密後的報文。


2.3.為什麼不允許在資料庫裡明文儲存密碼?
用明文儲存密碼有很大的資訊保安隱患。
一般資料庫裡還存有使用者的姓名、手機號、使用者名稱等資訊,一旦資料庫發生洩漏,再加上使用者的明文密碼,攻擊者就可以用使用者名稱和密碼去其他網站嘗試登陸(因為往往使用者會將多個網站的密碼根據習慣設成一樣的),一旦登陸成功,就會造成更嚴重的後果。

2.4.一般使用的加密方式有哪些?

1.MD5加密
MD5的典型應用是對一段Message(位元組串)產生fingerprint(指紋),以防止被“篡改”。舉個例子,你將一段話寫在一個叫 readme.txt檔案中,並對這個readme.txt產生一個MD5的值並記錄在案,然後你可以傳播這個檔案給別人,別人如果修改了檔案中的任何內容,你對這個檔案重新計算MD5時就會發現(兩個MD5值不相同)。如果再有一個第三方的認證機構,用MD5還可以防止檔案作者的“抵賴”,這就是所謂的數字簽名應用。

MD5演算法具有以下特點:

1、壓縮性:任意長度的資料,算出的MD5值長度都是固定的。

2、容易計算:從原資料計算出MD5值很容易。

3、抗修改性:對原資料進行任何改動,哪怕只修改1個位元組,所得到的MD5值都有很大區別。

4、強抗碰撞:已知原資料和其MD5值,想找到一個具有相同MD5值的資料(即偽造資料)是非常困難的。


2.DES加密
DES設計中使用了分組密碼設計的兩個原則:混淆(confusion)和擴散(diffusion),其目的是抗擊敵手對密碼系統的統計分析。混淆是使密文的統計特性與金鑰的取值之間的關係儘可能複雜化,以使金鑰和明文以及密文之間的依賴性對密碼分析者來說是無法利用的。擴散的作用就是將每一位明文的影響儘可能迅速地作用到較多的輸出密文位中,以便在大量的密文中消除明文的統計結構,並且使每一位金鑰的影響儘可能迅速地擴充套件到較多的密文位中,以防對金鑰進行逐段破譯。


3.RSA加密
它通常是先生成一對RSA 金鑰,其中之一是保密金鑰,由使用者儲存;另一個為公開金鑰,可對外公開,甚至可在網路伺服器中註冊。為提高保密強度,RSA金鑰至少為500位長,一般推薦使用1024位。這就使加密的計算量很大。為減少計算量,在傳送資訊時,常採用傳統加密方法與公開金鑰加密方法相結合的方式,即資訊採用改進的DES或IDEA金鑰加密,然後使用RSA金鑰加密對話金鑰和資訊摘要。對方收到資訊後,用不同的金鑰解密並可核對資訊摘要。
RSA演算法是第一個能同時用於加密和數字簽名的演算法,也易於理解和操作。RSA是被研究得最廣泛的公鑰演算法,從提出到現今的三十多年裡,經歷了各種攻擊的考驗,逐漸為人們接受,截止2017年被普遍認為是最優秀的公鑰方案之一。

4.對稱加密演算法

 加密者和解密者使用相同的密碼,這種方式的優點是加解密效率高,缺點是安全系統偏低,因為中除需要傳遞金鑰,所以有被截獲的風險。傳遞金鑰的過程常需要和對稱加密方式配合使用,如上所述。  常見的這種方式有 DES,AES.

優點:演算法公開、計算量小、加密速度快、加密效率高、可逆

缺點:雙方使用相同鑰匙,安全性得不到保證

現狀:對稱加密的速度比公鑰加密快很多,在很多場合都需要對稱加密,

演算法: 在對稱加密演算法中常用的演算法有:DES3DES、TDEA、Blowfish、RC2、RC4、RC5IDEA、SKIPJACK、AES等。不同演算法的實現機制不同,可參考對應演算法的詳細資料

相較於DES和3DES演算法而言,AES演算法有著更高的速度和資源使用效率,安全級別也較之更高了,被稱為下一代加密標準.

5.RSA加密(非對稱加密演算法)

非對稱加密演算法需要兩個金鑰:公開金鑰(publickey)和私有金鑰(privatekey)

非對稱加密中使用的主要演算法有:RSAElgamal、揹包演算法、Rabin、D-H、ECC(橢圓曲線加密演算法)等。

公開金鑰與私有金鑰是一對,如果用公開金鑰對資料進行加密,只有用對應的私有金鑰才能解密;如果用私有金鑰對資料進行加密,那麼只有用對應的公開金鑰才能解密

特點:

非對稱密碼體制的特點:演算法強度複雜、安全性依賴於演算法與金鑰但是由於其演算法複雜,而使得加密解密速度沒有對稱加密解密的速度快

對稱密碼體制中只有一種金鑰,並且是非公開的,如果要解密就得讓對方知道金鑰。所以保證其安全性就是保證金鑰的安全,而非對稱金鑰體制有兩種金鑰,其中一個是公開的,這樣就可以不需要像對稱密碼那樣傳輸對方的金鑰了.

2.5.MD5加密的弊端?如何解決?
由之前MD5的實現方法可知,任何一個相同檔案、字串生成的MD5值都是一樣的。比如
"123456"的MD5值任何時候生成的都是"e10adc3949ba59abbe56e057f20f883e"
並且,隨著現在計算機技術的不斷髮展,可以通過MD5值去逆推到原來的明文密碼。
因此就需要在加密時在給它一個隨機生成的值,摻到原密碼中進行加密。這個值就叫鹽值。

3.常見問題

如何對密碼進行加密

4.解決方案

參見編碼實戰

5.編碼實戰

程式碼

6.擴充套件思考

6.1.密碼為什麼不能用Hash儲存? 

單向Hash演算法(MD5, SHA1, SHA256等)可以保證管理員幾乎不能恢復原始密碼。但它有兩個特點:
1)從同一個密碼進行單向雜湊,得到的總是唯一確定的摘要
2)計算速度快。隨著技術進步,尤其是顯示卡在高效能運算中的普及,一秒鐘能夠完成數十億次單向雜湊計算。

7.參考文獻      

CSDN、百度百科

8.更多討論

8.1.密碼為什麼不能用Salt + Hash的方式儲存?

將明文密碼混入“隨機因素“,然後進行單向雜湊後儲存,也就是所謂的”Salted Hash”。 
這個方式相比上面的方案,最大的好處是針對每一個數據庫中的密碼,都需要建立一個完整的rainbow table進行匹配。 因為兩個同樣使用“passwordhunter”作為密碼的賬戶,在資料庫中儲存的摘要完全不同。
10多年以前,因為計算和記憶體大小的限制,這個方案還是足夠安全的,因為攻擊者沒有足夠的資源建立這麼多的rainbow table。 但是,在今日,因為顯示卡的恐怖的平行計算能力,這種攻擊已經完全可行。


8.2.為什麼bcrypt, scrypt等演算法能保證密碼儲存的安全性?

這類演算法有一個特點,演算法中都有個因子,用於指明計算密碼摘要所需要的資源和時間,也就是計算強度。計算強度越大,攻擊者建立rainbow table越困難,以至於不可繼續。

也就是說,故意延長一個密碼匹配的計算時間,如果一個密碼匹配需要1秒鐘,那麼匹配1000萬個密碼組合就需要115天,這個開銷就非常大。


8.3.什麼是撞庫?

撞庫是黑客通過收集網際網路已洩露的使用者和密碼資訊,生成對應的字典表,嘗試批量登陸其他網站後,得到一系列可以登入的使用者。很多使用者在不同網站使用的是相同的帳號密碼,因此黑客可以通過獲取使用者在A網站的賬戶從而嘗試登入B網址,這就可以理解為撞庫攻擊。

今天的分享就到這裡啦,歡迎大家點贊、轉發、留言、拍磚~

技能樹.IT修真院   

  “我們相信人人都可以成為一個工程師,現在開始,找個師兄,帶你入門,掌控自己學習的節奏,學習的路上不再迷茫”。

   這裡是技能樹.IT修真院,成千上萬的師兄在這裡找到了自己的學習路線,學習透明化,成長可見化,師兄1對1免費指導。