一.摘要算法和摘要
1.概述
摘要算法又稱哈希算法、散列算法。摘要也稱哈希值,表示輸入任意長(zhǎng)度的數(shù)據(jù),都會(huì)輸出固定長(zhǎng)度的數(shù)據(jù)。通過(guò)摘要算法(比如MDS和SHA-1)就可以得到該哈希值。
2.特點(diǎn)
-
長(zhǎng)度固定,結(jié)果越長(zhǎng),認(rèn)為摘要算法越安全* 原始數(shù)據(jù)不同,生成的摘要一定不同* 單項(xiàng)不可逆### 3、作用
摘要只驗(yàn)證數(shù)據(jù)的完整性和唯一性,單項(xiàng)不可逆。 哈希值長(zhǎng)度都是固定的:MD5輸出128bit長(zhǎng)度的二進(jìn)制串,SHA-1輸出160bit長(zhǎng)度的二進(jìn)制串。128bit指二進(jìn)制位數(shù)是128。 (8bit=1byte128bit=16byte)。
4、誤區(qū)
摘要只是用于驗(yàn)證數(shù)據(jù)完整性和唯一性的,不管原始數(shù)據(jù)是什么樣的,得到的哈希值都是固定長(zhǎng)度的,也就是說(shuō)哈希值并不是原始數(shù)據(jù)加密后的密文,只是一個(gè)驗(yàn)證身份的令牌,所以我們無(wú)法通過(guò)摘要還原出原始數(shù)據(jù),即單向不可逆,所以說(shuō)摘要算法是加密算法是不嚴(yán)謹(jǐn)?shù)摹?/p>
二.目前常用的摘要算法
算法 |
輸出長(zhǎng)度 |
MD5 |
128bit |
SHA-1 |
160bit |
SHA-256 |
256bit |
1.MD5
(1)MD5的用途
-
驗(yàn)證文件完整性* 存儲(chǔ)用戶口令(比如密碼)系統(tǒng)不用存儲(chǔ)用戶原始口令,而是存儲(chǔ)用戶原始口令的MD5,系統(tǒng)計(jì)算用戶輸入的原始口令的MD5并與數(shù)據(jù)存儲(chǔ)的MD5進(jìn)行對(duì)比,如果相同,則說(shuō)明口令正確,反之則說(shuō)明口令錯(cuò)誤。
(2)彩虹表
MD5雖然不可逆,也無(wú)法通過(guò)摘要還原出原始數(shù)據(jù),但不代表一定安全。由于字符串通過(guò)MD5計(jì)算的摘要是唯一的,那么MD5字典隨著時(shí)間積累保存越來(lái)越多的MD5記錄,通過(guò)窮舉這個(gè)字典就可以找到密碼。我們把這個(gè)字典稱為彩虹表。即采用各種Hash算法生成的明文和密文的對(duì)照表。
(3)加鹽或者base64--防止彩虹表窮舉
抵御彩虹表攻擊我們不能簡(jiǎn)單的記錄原始口令的MD5值,需要讓原始數(shù)據(jù)變得夠長(zhǎng)和夠復(fù)雜??梢酝ㄟ^(guò)base64編碼方法,對(duì)原始數(shù)據(jù)先進(jìn)行base64編碼,再M(fèi)D5,即md5(base64(password))。也可以通過(guò)加鹽的方法,對(duì)原始數(shù)據(jù)額外添加隨機(jī)數(shù)salt,再M(fèi)D5,即md5(salt+password)。Java代碼如下:
public static String md5(String string, String slat) {if (TextUtils.isEmpty(string)) {return "";}MessageDigest md5 = null;try {md5 = MessageDigest.getInstance("MD5");byte[] bytes = md5.digest((string + slat).getBytes());String result = "";for (byte b : bytes) {String temp = Integer.toHexString(b & 0xff);if (temp.length() == 1) {temp = "0" + temp;}result += temp;}return result;} catch (NoSuchAlgorithmException e) {e.printStackTrace();}return "";}
2.SHA-1
SHA-1算法也是一種哈希算法,輸出160bit,它的同類型算法有SHA-256和SHA-512,輸出的長(zhǎng)度分別是256bit和512bit。SHA-1在Java中使用同MD5類似,Java代碼如下:
public static String sha(String string) {if (TextUtils.isEmpty(string)) {return "";}MessageDigest md5 = null;try {md5 = MessageDigest.getInstance("sha-1");byte[] bytes = md5.digest((string ).getBytes());String result = "";for (byte b : bytes) {String temp = Integer.toHexString(b & 0xff);if (temp.length() == 1) {temp = "0" + temp;}result += temp;}return result;} catch (NoSuchAlgorithmException e) {e.printStackTrace();}return "";}
網(wǎng)絡(luò)安全成長(zhǎng)路線圖
這個(gè)方向初期比較容易入門(mén)一些,掌握一些基本技術(shù),拿起各種現(xiàn)成的工具就可以開(kāi)黑了。不過(guò),要想從腳本小子變成hei客大神,這個(gè)方向越往后,需要學(xué)習(xí)和掌握的東西就會(huì)越來(lái)越多,以下是學(xué)習(xí)網(wǎng)絡(luò)安全需要走的方向:


# 網(wǎng)絡(luò)安全學(xué)習(xí)方法
上面介紹了技術(shù)分類和學(xué)習(xí)路線,這里來(lái)談一下學(xué)習(xí)方法:
## 視頻學(xué)習(xí)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-740634.html
無(wú)論你是去B站或者是油管上面都有很多網(wǎng)絡(luò)安全的相關(guān)視頻可以學(xué)習(xí),當(dāng)然如果你還不知道選擇那套學(xué)習(xí),我這里也整理了一套和上述成長(zhǎng)路線圖掛鉤的視頻教程,完整版的視頻已經(jīng)上傳至CSDN官方,朋友們?nèi)绻枰梢渣c(diǎn)擊這個(gè)鏈接免費(fèi)領(lǐng)取。網(wǎng)絡(luò)安全重磅福利:入門(mén)&進(jìn)階全套282G學(xué)習(xí)資源包免費(fèi)分享!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-740634.html
到了這里,關(guān)于五分鐘搞懂摘要算法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!