淺析MD5與AES加密


一、MD5

  MD5全稱為信息-摘要算法(哈希算法),是計算機安全領域的散列函數,用於確保消息的完整性。另外摘要算法還有SHA1,具體請度娘。

  MD5是一種單向加密,它的加密不可逆,它將任意長度的字符串,經過算法計算后生成固定長度的數據,一般為16位表示

1、MD5的用途:

(1)消息完整性:每份數據生成的MD5碼不同,所以可以把MD5碼和數據一塊發送,在對端使用MD5加密對數據加密在與接收的MD5碼做對比,保證數據的正確性。

(2)安全訪問認證:常被用到 mysql 和傳遞用戶賬戶信息和密碼,從用戶端發送到服務器的只是一段128位的摘要,服務器拿到后直接將其存入數據庫,下次登錄只需與服務器的密文進行對比即可,這樣保護了用戶的信息,即便是后台人員也無法去獲取用戶的賬戶密碼。

2、數字簽名:MD5生成代碼

    public static String encryption(String plainText) { String re_md5 = new String(); try { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(plainText.getBytes()); byte b[] = md.digest(); int i; StringBuffer buf = new StringBuffer(""); for (int offset = 0; offset < b.length; offset++) { i = b[offset]; if (i < 0) i += 256; if (i < 16) buf.append("0"); buf.append(Integer.toHexString(i)); } re_md5 = buf.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return re_md5; }

  看知乎:https://www.zhihu.com/question/22311285

  上面說MD5其實不算是一種加密算法,用處大多在文件的是否完整,和密碼的保護上,更多詳情查看大神解析。

3、項目應用:

  在文件傳輸項目中,就通常使用MD5用於保證用戶的消息完整性,和用戶賬戶密碼的保護。

  在客戶端,使用MD5將用戶的賬戶和密碼,進行MD5加密,傳遞給服務器,服務器將其與服務器所保存的MD5進行對比,如果比配就將用戶自己的界面返回給用戶,然后進行數據的傳輸,也是使用MD5,在對端對數據進行加密,匹配查看數據是否完整。

二、其他加密算法

  非對稱加密:包括RSA DSA RCC,非對稱加密是相比對稱加密而言的。

  對稱加密:包括AES,DES,3DES

  兩者的關系:對稱加密是在加密前雙方都應該知道加密算法和密鑰,而且密鑰相同。比如:A和B實現約定使用的加密算法和解密密鑰,然后進行數據傳輸。

  非對稱加密是雙方各自產生自己的密鑰,然后將自己的加密密鑰傳遞給對方,在使用時先給數據使用對方的加密密鑰加密,發送給對方后,各自使用自己的解密密鑰來解密數據。

  不過對稱加密解密速度慢,安全性能高;非對稱加密速度快,安全性能不高,所以經常使用非對稱加密傳遞對稱加密的密鑰,然后使用對稱加密來加密傳遞的數據。

三、AES:

1、簡介

  高級加密標准(AES  -  Advanced Encryption Standard)為最常見的對稱加密算法(微信小程序加密傳輸就是用這個加密算法的)。

  對稱加密算法也就是加密和解密用相同的密鑰,具體的加密流程如下圖:

  下面簡單介紹下各個部分的作用與意義:

(1)明文P:沒有經過加密的數據。

(2)密鑰K:用來加密明文的密碼,在對稱加密算法中,加密與解密的密鑰是相同的。

  密鑰為接收方與發送方協商產生,但不可以直接在網絡上傳輸,否則會導致密鑰泄漏,通常是通過非對稱加密算法加密密鑰,然后再通過網絡傳輸給對方,或者直接面對面商量密鑰。密鑰是絕對不可以泄漏的,否則會被攻擊者還原密文,竊取機密數據。

(3)AES加密函數:

  設AES加密函數為E,則 C = E(K, P),其中P為明文,K為密鑰,C為密文。也就是說,把明文P和密鑰K作為加密函數的參數輸入,則加密函數E會輸出密文C。

(4)密文C:經加密函數處理后的數據

(5)AES解密函數:

  設AES解密函數為D,則 P = D(K, C),其中C為密文,K為密鑰,P為明文。也就是說,把密文C和密鑰K作為解密函數的參數輸入,則解密函數會輸出明文P。

2、對稱加密算法與非對稱加密算法的區別

(1)對稱加密算法

  加密和解密用到的密鑰是相同的,這種加密方式加密速度非常快,適合經常發送數據的場合。

  缺點是密鑰的傳輸比較麻煩。

(2)非對稱加密算法

  加密和解密用的密鑰是不同的,這種加密方式是用數學上的難解問題構造的,通常加密解密的速度比較慢,適合偶爾發送數據的場合。

  優點是密鑰傳輸方便。

  常見的非對稱加密算法為RSA、ECC和EIGamal。

(3)實際中,一般是通過RSA加密AES的密鑰,傳輸到接收方,接收方解密得到AES密鑰,然后發送方和接收方用AES密鑰來通信。

3、AES的基本結構

  在AES標准規范中,分組長度只能是128位,也就是說,每個分組為16個字節(每個字節8位)。密鑰的長度可以使用128位、192位或256位。密鑰的長度不同,推薦加密輪數也不同,如下表所示:

AES 密鑰長度(32位比特字) 分組長度(32位比特字) 加密輪數
AES-128 4 4 10
AES-192 6 4 12
AES-256 8 4 14

  AES加密是一種分組加密,他將明文划分一組一組的,每組明文長度相等,一次加密一組明文,直到全部加密,分組長度為128位(16字節),明文長度不足的進行填充

  AES加密是字節加密,使用時要轉成字節碼。明文分組用字節單位的正方形矩陣表示,一般稱為狀態矩陣。

  128位會進行10輪加密,一輪加密步驟:字節代換,行位移,列混合,輪密鑰加。在最后一輪不進行列混合;解密反過來,分為輪密鑰加,逆列混合,逆行位移,逆字節代換,第一步不進行逆列混合。

  AES加密的內容詳見這篇博客:https://blog.csdn.net/qq_28205153/article/details/55798628

  關於AES加密的一些內容,也可以見之前的博客:從nodejs的AES加密解密之后文件大小不一致的問題談談AES加密中的補位nodejs大文件分片加密解密


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM