Java實現MD5演算法過程,並利用自帶MD5函式進行對比校驗
文章目錄
一、環境說明
作業系統:window10
程式語言:Java (JDK版本 11.0.1)
使用IDE:Intellij IDEA
二、演算法原理概述
整個MD5(資訊摘要演算法5)的基本過程可以概括為以下幾個步驟:
-
填充:訊息為 bits的原始訊息資料尾部填充長度為 bits的標識 (至少要填充一個bit) 。使得填充後的訊息位數滿足 (注:當 )時, 。
填充好的訊息尾部需要在附加 值的低64位即 。 最終結果得到 的填充訊息。
-
分塊:把填充之後的訊息結果分割為 個 分組: 。也是 個64位元組的分組。
-
緩衝區初始化:初始化一個 的MD緩衝區,記為 ,表示成4個 的暫存器 ; 。
-
迴圈壓縮 :對L個訊息分組 ,逐個經過4重迴圈的壓縮演算法。表示為:
-
得出結果:最後一個訊息分組經過 壓縮得到MD5結果為MD值,即 。
整個加密演算法的基本流程如上。而整個加密演算法的核心步驟在於 壓縮函式流程如下。
-
總控流程: 從 輸入128位,分配到緩衝區 ,從訊息分組輸入512位 ,經過4輪迴圈,每次迴圈16次迭代(共64次迭代)之後,得到用於下一輪的輸入的 值。如果 ,即輸出MD5值。
-
每輪迴圈:結合T表元素 和訊息分組的不同部分 ,每輪固定不同的生成函式 做16次迭代運算,生成下一輪迴圈的輸入。
-
四個生成函式 :
-
訊息分組的內容:需要靠下標k來進行運算得到參與 迭代的訊息部分,代表當前處理訊息分組的第 個 位字,即 。
在各輪迴圈中第 次迭代 使用的 的確定:
設 :
◌ 第1輪迭代: .
順序使用 $ X[0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15]$
◌ 第2輪迭代: .
順序使用