- 密碼學教程
- 密碼學 - 首頁
- 密碼學 - 起源
- 密碼學 - 歷史
- 密碼學 - 原理
- 密碼學 - 應用
- 密碼學 - 優點與缺點
- 密碼學 - 現代
- 密碼學 - 傳統密碼
- 密碼學 - 加密需求
- 密碼學 - 雙重加密
- 密碼系統
- 密碼系統
- 密碼系統 - 元件
- 密碼系統攻擊
- 密碼系統 - 彩虹表攻擊
- 密碼系統 - 字典攻擊
- 密碼系統 - 暴力破解攻擊
- 密碼系統 - 密碼分析技術
- 密碼學型別
- 密碼系統 - 型別
- 公鑰加密
- 現代對稱金鑰加密
- 密碼學雜湊函式
- 金鑰管理
- 密碼系統 - 金鑰生成
- 密碼系統 - 金鑰儲存
- 密碼系統 - 金鑰分發
- 密碼系統 - 金鑰吊銷
- 分組密碼
- 密碼系統 - 流密碼
- 密碼學 - 分組密碼
- 密碼學 - Feistel 分組密碼
- 分組密碼操作模式
- 分組密碼操作模式
- 電子密碼本 (ECB) 模式
- 密碼分組連結 (CBC) 模式
- 密碼反饋 (CFB) 模式
- 輸出反饋 (OFB) 模式
- 計數器 (CTR) 模式
- 經典密碼
- 密碼學 - 反向密碼
- 密碼學 - 凱撒密碼
- 密碼學 - ROT13 演算法
- 密碼學 - 換位密碼
- 密碼學 - 加密換位密碼
- 密碼學 - 解密換位密碼
- 密碼學 - 乘法密碼
- 密碼學 - 仿射密碼
- 密碼學 - 簡單替換密碼
- 密碼學 - 簡單替換密碼加密
- 密碼學 - 簡單替換密碼解密
- 密碼學 - 維吉尼亞密碼
- 密碼學 - 實現維吉尼亞密碼
- 現代密碼
- Base64 編碼與解碼
- 密碼學 - XOR 加密
- 替換技術
- 密碼學 - 單字母替換密碼
- 密碼學 - 破解單字母替換密碼
- 密碼學 - 多字母替換密碼
- 密碼學 - Playfair 密碼
- 密碼學 - 希爾密碼
- 多字母替換密碼
- 密碼學 - 一次性密碼本密碼
- 一次性密碼本密碼的實現
- 密碼學 - 換位技術
- 密碼學 - 柵欄密碼
- 密碼學 - 列置換
- 密碼學 - 隱寫術
- 對稱演算法
- 密碼學 - 資料加密
- 密碼學 - 加密演算法
- 密碼學 - 資料加密標準
- 密碼學 - 三重 DES
- 密碼學 - 雙重 DES
- 高階加密標準
- 密碼學 - AES 結構
- 密碼學 - AES 變換函式
- 密碼學 - 位元組替換變換
- 密碼學 - 行移位變換
- 密碼學 - 列混合變換
- 密碼學 - 輪金鑰加變換
- 密碼學 - AES 金鑰擴充套件演算法
- 密碼學 - Blowfish 演算法
- 密碼學 - SHA 演算法
- 密碼學 - RC4 演算法
- 密碼學 - Camellia 加密演算法
- 密碼學 - ChaCha20 加密演算法
- 密碼學 - CAST5 加密演算法
- 密碼學 - SEED 加密演算法
- 密碼學 - SM4 加密演算法
- IDEA - 國際資料加密演算法
- 公鑰(非對稱)密碼學演算法
- 密碼學 - RSA 演算法
- 密碼學 - RSA 加密
- 密碼學 - RSA 解密
- 密碼學 - 建立 RSA 金鑰
- 密碼學 - 破解 RSA 密碼
- 密碼學 - ECDSA 演算法
- 密碼學 - DSA 演算法
- 密碼學 - Diffie-Hellman 演算法
- 密碼學中的資料完整性
- 密碼學中的資料完整性
- 訊息認證
- 密碼學數字簽名
- 公鑰基礎設施
- 雜湊
- MD5(資訊摘要演算法 5)
- SHA-1(安全雜湊演算法 1)
- SHA-256(安全雜湊演算法 256 位)
- SHA-512(安全雜湊演算法 512 位)
- SHA-3(安全雜湊演算法 3)
- 雜湊密碼
- Bcrypt 雜湊模組
- 現代密碼學
- 量子密碼學
- 後量子密碼學
- 密碼協議
- 密碼學 - SSL/TLS 協議
- 密碼學 - SSH 協議
- 密碼學 - IPsec 協議
- 密碼學 - PGP 協議
- 影像與檔案加密
- 密碼學 - 影像
- 密碼學 - 檔案
- 隱寫術 - 影像
- 檔案加密和解密
- 密碼學 - 檔案加密
- 密碼學 - 檔案解密
- 物聯網中的密碼學
- 物聯網安全挑戰、威脅和攻擊
- 物聯網安全加密技術
- 物聯網裝置通訊協議
- 常用加密技術
- 自定義構建加密演算法(混合加密)
- 雲加密
- 量子密碼學
- 密碼學中的影像隱寫術
- DNA 密碼學
- 密碼學中的一次性密碼 (OTP) 演算法
- 區別
- 密碼學 - MD5 與 SHA1
- 密碼學 - RSA 與 DSA
- 密碼學 - RSA 與 Diffie-Hellman
- 密碼學與密碼學
- 密碼學 - 密碼學與密碼分析
- 密碼學 - 經典與量子
- 密碼學與隱寫術
- 密碼學與加密
- 密碼學與網路安全
- 密碼學 - 流密碼與分組密碼
- 密碼學 - AES 與 DES 密碼
- 密碼學 - 對稱與非對稱
- 密碼學有用資源
- 密碼學 - 快速指南
- 密碼學 - 討論
MD5(資訊摘要演算法 5)
MD5 方法是最早獲得全球認可的雜湊演算法之一,它取代了 MD4 演算法。儘管存在潛在的安全風險,但 MD5 在各種情況下都是資料基礎設施的重要組成部分。
在深入研究 MD5 之前,我們需要了解雜湊到底是什麼!
什麼是雜湊?
雜湊是將標準資訊字串轉換為複雜資料片段的過程。這樣做是為了對資訊進行加密,使其完全改變原始值,從而產生一個與原始值完全不同的雜湊值。
雜湊使用雜湊函式將常規資料轉換為不可讀的形式。這些雜湊函式是一系列數學運算,通常稱為雜湊摘要或摘要,將原始資料轉換為其雜湊值。無論輸入大小如何,特定雜湊函式(例如 MD5 或 SHA1)的摘要大小始終相同。
雜湊主要有兩個用例:
密碼驗證
為了保護密碼免受攻擊者的侵害,網站的使用者憑據通常以雜湊格式儲存。比較密碼雜湊更私密,因為雜湊函式對於相同的輸入始終返回相同的結果。
以下是完整流程的工作原理:
- 使用者在登入網站時建立新密碼。
- 它對密碼進行雜湊,並將結果作為摘要儲存在伺服器上。
- 使用者每次嘗試登入時都必須重新輸入密碼。
- 為了建立摘要,它會再次使用雜湊演算法執行透過輸入的密碼。
- 如果新建立的摘要與伺服器上的摘要匹配,則驗證登入。
完整性驗證
雜湊函式可用於檢查某些檔案是否存在資料損壞。與上述示例一樣,雜湊函式即使在迭代引數發生變化的情況下,對於相同的輸入也會始終產生相同的結果。
該過程的步驟如下:
- 個人將檔案釋出到網際網路。
- 雜湊摘要也與檔案一起上傳。
- 當用戶獲取檔案時,雜湊摘要會更新。
- 如果摘要與初始雜湊值匹配,則檔案完整性得到保留。
- 在建立了雜湊的基本基礎後,您就可以檢查 MD5 演算法,這是本章的主要重點。
什麼是 MD5 演算法?
MD5(訊息摘要方法 5)是一種加密雜湊演算法,可用於從任意長度的字串建立 128 位摘要。摘要使用 32 位十六進位制數表示。
該方法由羅納德·裡維斯特於 1991 年建立,用於啟用數字簽名的驗證。為了增強安全措施,它已整合到各種框架中。
由於雜湊函式的建議,摘要大小始終為 128 位,即使對輸入字串進行微小的更改也會導致摘要發生很大差異。這是為了減少雜湊衝突(或生成類似雜湊)的可能性。
現在,您將學習構成 MD5 演算法工作原理的步驟。
MD5 演算法步驟
該演算法包含四個主要部分:
填充位
當您收到輸入字串時,請驗證其大小是否比 512 的倍數小 64 位。為了舍入多餘的字元,您必須在新增一個 (1) 到填充位之後新增零。
填充長度
最終字串需要包含更多字元才能成為 512 的倍數。為此,請獲取原始輸入的長度並將其表示為 64 位。將兩者組合後,最後一個字串將準備好進行雜湊。
初始化 MD 緩衝區
整個字串被分成多個塊,每個塊包含 512 位。此外,需要初始化四個緩衝區 (A、B、C 和 D)。這四個 32 位緩衝區分別初始化如下:
處理每個塊
512 位塊可以進一步細分為 16 個子塊,每個子塊包含 32 位。四輪運算中的每一輪都使用所有緩衝區、常量陣列值和子塊。
您可以將此常量陣列稱為 T[1] ⇒ T[64]。
子塊由符號 M[0] ⇒ M[15] 標識。
MD5 的實現
現在,我們將藉助不同的程式語言來實現 MD5 演算法,以便您能夠使用任何一種語言進行編碼。
使用 Python
為了實現 MD5 演算法,我們將使用 Python 的 hashlib 模組,該模組提供了對計算給定訊息的雜湊值的支援。因此,Python 中的程式碼如下所示:
import hashlib
def generate_md5(input_string):
md5_hash = hashlib.md5(input_string.encode()).hexdigest()
return md5_hash
# function execution
input_string = "tutorialspoint"
md5_hash = generate_md5(input_string)
print("MD5 hash for", input_string, ":", md5_hash)
輸出
MD5 hash for tutorialspoint : 6c60b3cfe5124f982eb629e00a98f01f
使用 Java
現在,我們將藉助 Java 及其內建庫來實現 MD5。因此,我們將使用兩個類 MessageDigest 和 NoSuchAlgorithmException。MessageDigest 類允許我們建立各種訊息摘要演算法(如 MD5)的例項,而 NoSuchAlgorithmException 在所需加密演算法在環境中不可訪問時引發。使用 Java 實現 MD5 的程式碼如下所示:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class Md5Algo {
public static String generateMD5(String input) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] inputBytes = input.getBytes();
byte[] hashBytes = md.digest(inputBytes);
// Convert the byte array to a hexadecimal string
StringBuilder sb = new StringBuilder();
for (byte b : hashBytes) {
sb.append(String.format("%02x", b));
}
return sb.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}
}
public static void main(String[] args) {
String input = "tutorialspoint";
String md5Hash = generateMD5(input);
System.out.println("MD5 hash for " + input + " : " + md5Hash);
}
}
輸出
MD5 hash for tutorialspoint : 6c60b3cfe5124f982eb629e00a98f01f
MD5 的應用
以下是我們可以使用 MD5 演算法的一些常見應用:
- 訊息摘要用於驗證和檢查檔案的完整性。
- 資料加密和安全由 MD5 處理。
- 它用於密碼驗證和訊息摘要,無論訊息大小。
- 它也用於圖形和遊戲板。
MD5 的優點
以下是 MD5 的一些優點:
- 易於比較 - 在摘要驗證方面,與最新的雜湊算法系列相比,32 位摘要的比較相對簡單。
- 保持密碼安全 - 如果密碼未以未加密格式儲存,駭客和其他攻擊者可以訪問密碼。資料庫也受益於摘要,因為所有雜湊值的大小相同。
- 低資源消耗 - 為了將多個服務合併到一個框架中而不會引入 CPU 成本,需要相對較小的記憶體佔用。
- 完整性檢查 - 透過分析傳輸前後雜湊值,您可以留意任何檔案損壞。一旦雜湊值匹配,檔案完整性檢查就是有效的並防止資料損壞。
MD5 的缺點
- 有時,對於不同的輸入,MD5 會建立類似的雜湊函式。
- SHA1 比 MD5 提供更好的安全性。
- 據說 MD5 演算法不安全。目前正在使用 SHA256 代替 MD5。
- MD5 不適用於對稱或非對稱演算法。
MD5 演算法安全嗎?
任何訊息摘要函式的目標都是生成看起來隨機的摘要。為了使雜湊函式被認為是加密安全的,需要滿足兩個條件:
- 攻擊者無法生成與給定雜湊值匹配的訊息。
- 攻擊者不可能生成具有相同雜湊值的兩個訊息。
IETF 指出,MD5 雜湊不應用於加密身份驗證,因為它們不再被視為加密安全的技術。