淺析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:
AES加密有三種長度分別是128位, 192位,256位。
AES加密是一種分組加密,他將明文劃分一組一組的,每組明文長度相等,一次加密一組明文,直到全部加密,分組長度為128位(16位元組),明文長度不足的進行填充。AES加密是位元組加密,使用時要轉成位元組碼。明文分組用位元組單位的正方形矩陣表示,一般稱為狀態矩陣。
128位會進行10輪加密,一輪加密步驟:位元組代換,行位移,列混合,輪金鑰加。在最後一輪不進行列混合;解密反過來,分為輪金鑰加,逆列混合,逆行位移,逆位元組代換,第一步不進行逆列混合。
位元組代換:AES加密定義了一個S盒和一個逆S盒。將狀態矩陣中的元素查表進行替換。
行移位:將行位移進行左迴圈位移,即狀態矩陣的第N行左移N個位元組。
列混合變換:同過將行移位矩陣與固有矩陣相乘得到的混合矩陣。
輪金鑰加:將128位輪金鑰Ki同狀態矩陣中的資料進行逐位異或操作,如下圖所示,金鑰Ki中每個字W[4i],W[4i+1],W[4i+2],W[4i+3]為32位位元字,包含4個位元組,他們的生成演算法下面在下面介紹。輪金鑰加過程可以看成是字逐位異或的結果,也可以看成位元組級別或者位級別的操作。也就是說,可以看成S0 S1 S2 S3 組成的32位字與W[4i]的異或運算。
AES加密的內容詳見這篇部落格:https://blog.csdn.net/qq_28205153/article/details/55798628
關於AES加密的一些內容,也可以見之前的部落格:從nodejs的AES加密解密之後檔案大小不一致的問題談談AES加密中的補位、nodejs大檔案分片加密解密