1.MD5加密
MD5(單向散列算法)的全稱是Message-Digest Algorithm 5(信息-摘要算法),MD5算法的使用不需要支付任何版權費用。
MD5的功能:
①.輸入任意長度的信息,經過處理,輸出為128位的信息(數字指紋);
②.不同的輸入得到的不同的結果(唯一性);
③.根據128位的輸出結果不可能反推出輸入的信息(不可逆),也就是只能加密,不能解密;
MD5的用途:
1、防止被篡改:
1)比如發送一個電子文檔,發送前,我先得到MD5的輸出結果a。然后在對方收到電子文檔后,對方也得到一個MD5的輸出結果b。如果a與b一樣就代表中途未被篡改。2)比如我提供文件下載,為了防止不法分子在安裝程序中添加木馬,我可以在網站上公布由安裝文件得到的MD5輸出結果。3)SVN在檢測文件是否在CheckOut后被修改過,也是用到了MD5.
2、防止直接看到明文:
現在很多網站在數據庫存儲用戶的密碼的時候都是存儲用戶密碼的MD5值。這樣就算不法分子得到數據庫的用戶密碼的MD5值,也無法知道用戶的密碼(其實這樣是不安全的,后面我會提到)。(比如在UNIX系統中用戶的密碼就是以MD5(或其它類似的算法)經加密后存儲在文件系統中。當用戶登錄的時候,系統把用戶輸入的密碼計算成MD5值,然后再去和保存在文件系統中的MD5值進行比較,進而確定輸入的密碼是否正確。通過這樣的步驟,系統在並不知道用戶密碼的明碼的情況下就可以確定用戶登錄系統的合法性。這不但可以避免用戶的密碼被具有系統管理員權限的用戶知道,而且還在一定程度上增加了密碼被破解的難度。)
3、防止抵賴(數字簽名):
這需要一個第三方認證機構。例如A寫了一個文件,認證機構對此文件用MD5算法產生摘要信息並做好記錄。若以后A說這文件不是他寫的,權威機構只需對此文件重新產生摘要信息,然后跟記錄在冊的摘要信息進行比對,相同的話,就證明是A寫的了。這就是所謂的“數字簽名”。
我們強大的支付寶使用MD5加密,正式因為MD5強大的用途。
2.RSA加密
①.RSA是第一個比較完善的公開密鑰算法,它既能用於加密,也能用於數字簽名。
②.RSA加密是可逆的,一個字符串可以經rsa加密后,經加密后的字符串傳到對端如服務器上,再進行解密即可。前提是服務器知道解密的私鑰,當然這個私鑰最好不要再網絡傳輸。
③.RSA以它的三個發明者Ron Rivest, Adi Shamir, Leonard Adleman的名字首字母命名,這個算法經受住了多年深入的密碼分析,雖然密碼分析者既不能證明也不能否定RSA的安全性,但這恰恰說明該算法有一定的可信性,目前它已經成為最流行的公開密鑰算法。
④.RSA的安全基於大數分解的難度。其公鑰和私鑰是一對大素數(100到200位十進制數或更大)的函數。從一個公鑰和密文恢復出明文的難度,等價於分解兩個大素數之積(這是公認的數學難題)。
RSA的公鑰、私鑰的組成,以及加密、解密的公式可見於下表:
RSA的安全性:
在RSA密碼應用中,公鑰KU是被公開的,即e和n的數值可以被第三方竊聽者得到。破解RSA密碼的問題就是從已知的e和n的數值(n等於pq),想法求出d的數值,這樣就可以得到私鑰來破解密文。從上文中的公式:d ≡e-1 (mod((p-1)(q-1)))或de≡1 (mod((p-1)(q-1))) 我們可以看出。密碼破解的實質問題是:從Pq的數值,去求出(p-1)和(q-1)。換句話說,只要求出p和q的值,我們就能求出d的值而得到私鑰。
當p和q是一個大素數的時候,從它們的積pq去分解因子p和q,這是一個公認的數學難題。比如當pq大到1024位時,迄今為止還沒有人能夠利用任何計算工具去完成分解因子的任務。因此,RSA從提出到現在已近二十年,經歷了各種攻擊的考驗,逐漸為人們接受,普遍認為是目前最優秀的公鑰方案之一。
然而,雖然RSA的安全性依賴於大數的因子分解,但並沒有從理論上證明破譯RSA的難度與大數分解難度等價。即RSA的重大缺陷是無法從理論上把握它的保密性能如何。
此外,RSA的缺點還有:A)產生密鑰很麻煩,受到素數產生技術的限制,因而難以做到一次一密。B)分組長度太大,為保證安全性,n 至少也要 600 bits 以上,使運算代價很高,尤其是速度較慢,較對稱密碼算法慢幾個數量級;且隨着大數分解技術的發展,這個長度還在增加,不利於數據格式的標准化。因此,使用RSA只能加密少量數據,大量的數據加密還要靠對稱密碼算法。
我相信這么強大的加密方式想要破解,幾乎不可能吧。這也是RSA用在支付寶加密中的原因。