1. 程式人生 > >md5口算演算法

md5口算演算法

MD5口算演算法

MD5演算法簡要的敘述可以為:MD5512位分組來處理輸入的資訊,且每一分組又被劃分為1632位子分組,經過了一系列的處理後,演算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成一個128位雜湊值。

MD5演算法中,首先需要對資訊進行填充,使其位元組長度對512求餘的結果等於448。因此,資訊的位元組長度(Bits Length)將被擴充套件至N*512+448,即N*64+56個位元組(Bytes),N為一個正整數。填充的方法如下,在資訊的後面填充一個1和無數個0,直到滿足上面的條件時才停止用0對資訊的填充。然後,在在這個結果後面附加一個以64位二進位制表示的填充前資訊長度。經過這兩步的處理,現在的資訊位元組長度

=N*512+448+64=(N+1)*512,即長度恰好是512的整數倍。這樣做的原因是為滿足後面處理中對資訊長度的要求。

MD5中有四個32位被稱作連結變數(Chaining Variable)的整數引數,他們分別為:A=0x01234567B=0x89abcdefC=0xfedcba98D=0x76543210

當設定好這四個連結變數後,就開始進入演算法的四輪迴圈運算。迴圈的次數是資訊中512位資訊分組的數目。

將上面四個連結變數複製到另外四個變數中:AaBbCcDd

主迴圈有四輪(MD4只有三輪),每輪迴圈都很相似。第一輪進行16次操作。每次操作對abcd中的其中三個作一次非線性函式運算,然後將所得結果加上第四個變數,文字的一個子分組和一個常數。再將所得結果向右環移一個不定的數,並加上

abcd中之一。最後用該結果取代abcd中之一。

以一下是每次操作中用到的四個非線性函式(每輪一個)。

F(X,Y,Z) =(X&Y)|((~X)&Z)

G(X,Y,Z) =(X&Z)|(Y&(~Z))

H(X,Y,Z) =X^Y^Z

I(X,Y,Z)=Y^(X|(~Z))

&是與,|是或,~是非,^是異或)

這四個函式的說明:如果XYZ的對應位是獨立和均勻的,那麼結果的每一位也應是獨立和均勻的。

F是一個逐位運算的函式。即,如果X,那麼Y,否則Z。函式H是逐位奇偶操作符。

假設Mj表示訊息的第j個子分組(從015),

<<

FF(a, b, c, d, Mj, s, ti)表示 a = b + ((a + (F(b, c, d) + Mj + ti) << s

GG(a, b, c, d, Mj, s, ti)表示 a = b + ((a + (G(b, c, d) + Mj + ti) << s

HH(a, b, c, d, Mj, s, ti)表示 a = b + ((a + (H(b, c, d) + Mj + ti) << s

II(a, b, c, d, Mj, s, ti)表示 a = b + ((a + (I(b, c, d) + Mj + ti) << s

這四輪(64步)是:

第一輪

FF(a, b, c, d, M0, 7, 0xd76aa478)

FF(d, a, b, c, M1, 12, 0xe8c7b756)

FF(c, d, a, b, M2, 17, 0x242070db)

FF(b, c, d, a, M3, 22, 0xc1bdceee)

FF(a, b, c, d, M4, 7, 0xf57c0faf)

FF(d, a, b, c, M5, 12, 0x4787c62a)

FF(c, d, a, b, M6, 17, 0xa8304613)

FF(b, c, d, a, M7, 22, 0xfd469501)

FF(a, b, c, d, M8, 7, 0x698098d8)

FF(d, a, b, c, M9, 12, 0x8b44f7af)

FF(c, d, a, b, M10, 17, 0xffff5bb1)

FF(b, c, d, a, M11, 22, 0x895cd7be)

FF(a, b, c, d, M12, 7, 0x6b901122)

FF(d, a, b, c, M13, 12, 0xfd987193)

FF(c, d, a, b, M14, 17, 0xa679438e)

FF(b, c, d, a, M15, 22, 0x49b40821)

第二輪

GG(a, b, c, d, M1, 5, 0xf61e2562)

GG(d, a, b, c, M6, 9, 0xc040b340)

GG(c, d, a, b, M11, 14, 0x265e5a51)

GG(b, c, d, a, M0, 20, 0xe9b6c7aa)

GG(a, b, c, d, M5, 5, 0xd62f105d)

GG(d, a, b, c, M10, 9, 0x02441453)

GG(c, d, a, b, M15, 14, 0xd8a1e681)

GG(b, c, d, a, M4, 20, 0xe7d3fbc8)

GG(a, b, c, d, M9, 5, 0x21e1cde6)

GG(d, a, b, c, M14, 9, 0xc33707d6)

GG(c, d, a, b, M3, 14, 0xf4d50d87)

GG(b, c, d, a, M8, 20, 0x455a14ed)

GG(a, b, c, d, M13, 5, 0xa9e3e905)

GG(d, a, b, c, M2, 9, 0xfcefa3f8)

GG(c, d, a, b, M7, 14, 0x676f02d9)

GG(b, c, d, a, M12, 20, 0x8d2a4c8a)

第三輪

HH(a, b, c, d, M5, 4, 0xfffa3942)

HH(d, a, b, c, M8, 11, 0x8771f681)

HH(c, d, a, b, M11, 16, 0x6d9d6122)

HH(b, c, d, a, M14, 23, 0xfde5380c)

HH(a, b, c, d, M1, 4, 0xa4beea44)

HH(d, a, b, c, M4, 11, 0x4bdecfa9)

HH(c, d, a, b, M7, 16, 0xf6bb4b60)

HH(b, c, d, a, M10, 23, 0xbebfbc70)

HH(a, b, c, d, M13, 4, 0x289b7ec6)

HH(d, a, b, c, M0, 11, 0xeaa127fa)

HH(c, d, a, b, M3, 16, 0xd4ef3085)

HH(b, c, d, a, M6, 23, 0x04881d05)

HH(a, b, c, d, M9, 4, 0xd9d4d039)

HH(d, a, b, c, M12, 11, 0xe6db99e5)

HH(c, d, a, b, M15, 16, 0x1fa27cf8)

HH(b, c, d, a, M2, 23, 0xc4ac5665)

第四輪

II(a, b, c, d, M0, 6, 0xf4292244)

II(d, a, b, c, M7, 10, 0x432aff97)

II(c, d, a, b, M14, 15, 0xab9423a7)

II(b, c, d, a, M5, 21, 0xfc93a039)

II(a, b, c, d, M12, 6, 0x655b59c3)

II(d, a, b, c, M3, 10, 0x8f0ccc92)

II(c, d, a, b, M10, 15, 0xffeff47d)

II(b, c, d, a, M1, 21, 0x85845dd1)

II(a, b, c, d, M8, 6, 0x6fa87e4f)

II(d, a, b, c, M15, 10, 0xfe2ce6e0)

II(c, d, a, b, M6, 15, 0xa3014314)

II(b, c, d, a, M13, 21, 0x4e0811a1)

II(a, b, c, d, M4, 6, 0xf7537e82)

II(d, a, b, c, M11, 10, 0xbd3af235)

II(c, d, a, b, M2, 15, 0x2ad7d2bb)

II(b, c, d, a, M9, 21, 0xeb86d391)

常數ti可以如下選擇:

在第i步中,ti4294967296*abs(sin(i))的整數部分,i的單位是弧度。(4294967296等於232次方)

所有這些完成之後,將ABCD分別加上abcd。然後用下一分組資料繼續執行演算法,最後的輸出是ABCD的級聯。

當你按照我上面所說的方法實現MD5演算法以後,你可以用以下幾個資訊對你做出來的程式作一個簡單的測試,看看程式有沒有錯誤。

MD5 ("") = d41d8cd98f00b204e9800998ecf8427e

MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661

MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72

MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0

MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b

MD5 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") =

d174ab98d277d9f5a5611c2c9f419d9f

天奇工作室

*[email protected]

*QQ2713022938

相關推薦

md5演算法

MD5口算演算法 對MD5演算法簡要的敘述可以為:MD5以512位分組來處理輸入的資訊,且每一分組又被劃分為16個32位子分組,經過了一系列的處理後,演算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成一個128位雜湊值。 在MD5演算法中,首先需要對資訊進

MD5加密法原理(含代碼)以及SHA法相關信息

核心 但是 加密 不支持 .com about tran temp get 轉載: http://blog.csdn.net/forgotaboutgirl/article/details/7258109 java代碼部分 親測通過。 這裏 就 只貼一下代碼吧 。 動作只有

md5加密

一個 static trac exceptio string google bytes byte param    package com.google; import java.security.MessageDigest;import java.security.NoS

小學四則運算練習app---No.4

文章 posit IT 閃退 div not dism next linear 今天主要是改了出題頁中各個組件的位置以及時間的接收還有時間控制,代碼如下:(但是存在一個問題 設置頁面點擊確定按鈕進入出題界面時有時會閃退,未解決!) CalculatorActivity.c

小學四則運算練習app---No.2

但是 textview 空白 name match ack 提示 androi dimen 經過昨天的了解,雖然還是很懵,總要下手摸到鼠標來寫第一個頁面! 這是一開始設置出體數目和時間的頁面,使用者根據提示進行相關設置即可! 代碼如下: <?xml versio

BZOJ5358: [Lydsy1805月賽]訓練

cst 簽到 pre bre ons 因子 name 分離 了吧 題解:判斷d是否整除,可以轉化為求這段區間內d的因子的指數是否均大於d中的指數。容易想到把每個數字都分解為素因子形式,對每個素數出現的次數求個前綴和即可。然而,這樣時間空間都不行。註意到對於一個數x,小於sq

UART接法移植加密芯片的調試技巧——法調試

進行 技巧 工程 ret 通過 過程 完成 運行 才會 算法移植加密芯片的調試包含2個部分:通訊調試和算法調試。之前講到過通訊調試技巧,接下來本篇將對算法調試中的問題進行分析總結,來幫助客戶順利地完成調試。算法調試中的常見問題:1、不要自行建工程客戶在移植算法時,無需新建工

滑動窗

sts lang 算法 set 註意 remove move i++ bcb 滑動窗口這種解題思路在平常的應用中很常見。 描述 給定一個字符串,找出不含有重復字符的最長子串的長度。 示例: 給定 "abcabcbb" ,沒有重復字符的最長子串是 &quo

MD5加密法的Java實現

md5 sys logger light hex ger cep dig i++ import java.security.MessageDigest; import java.util.logging.Logger; /** * MD5加密算法 */ public

二進制與十進制轉換技巧

十進制 二進制 p地址 地址 code pre 進制 十進制轉二進制 技巧 二進制轉換,IP地址十進制轉二進制:1 1 //10^02 10 //10^14 1 00

兩位數相乘的方法

位數 計算 答案 例題 spa span 步驟 數字 進位 計算方法: 頭乘頭,尾乘尾,中間交叉相乘積相加 意思是:十位乘十位,個位乘個位,中間十位,個位交叉相乘所得的積加在一起, 知道了計算方法,再來說一下計算步驟,先兩邊後中間,確定了中間得數利用乘法口訣兩邊得數很容易得

Go語言實現單向雜湊函式 —— MD5訊息摘要演算法、SHA256與224(Go語言實現)

 MD5訊息摘要演算法 MD5訊息摘要演算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼雜湊函式,可以產生出一個128位(16位元組)的雜湊值(hash value),用於確保資訊傳輸完整一致。 Go語言實現方式一: packag

python中 雜湊表應用,常見函式 MD5和SHA2演算法

通過雜湊函式計算資料儲存 insert(key, value) 插入鍵值對 get(key) 獲取值 delete(key) 刪除值 常見雜湊函式 除法雜湊:h(k) = k % m 乘法雜湊:h(k) = floor(m*(

hdu6287 訓練(數學+二分)(2018女生賽

/* hdu6287 口算訓練(數學+二分) by zhuhua 題意:數量級都是e5,查詢a[l]*...*a[r]%d==0 ? puts("Yes"):puts("No"); 思路:將每個陣列質因數分解,在質因數中儲存出現過的下標,二分求解。 用素數

HDU6287 訓練

題目連結 Problem Description 小Q非常喜歡數學,但是他的口算能力非常弱。因此他找到了小T,給了小T一個長度為n的正整數序列a1,a2,...,an,要求小T丟擲m個問題以訓練他的口算能力。 每個問題給出三個正整數l,r,d,小Q需要通過口算快速判斷al

常用演算法 之 詳解 MD5(基於演算法的官方原文件)

什麼是 MD5   全稱是 MD5 訊息摘要演算法(The MD5 Message-Digest Algorithm),對輸入任意長度的訊息進行處理,最終產生一個128位的訊息摘要(雜湊值(hash value))。不同的輸入得到的不同的結果(唯一性)。MD5

CRC32、MD5、SHA1演算法校驗介紹

CRC32、MD5和SHA1是目前用來校驗檔案資訊真實性的主要手段,使用這些校驗演算法可以發現儲存或傳輸的資訊是否受到損壞或篡改,防止檔案或資訊被惡意篡改。下面將分別介紹這幾種校驗演算法。 1、CRC32 CRC全稱為Cyclic Redundancy Che

基於四元數的姿態解演算法圖解

    下面的兩個地址是我存放在百度雲網盤的附件,分別是基於四元數的互補濾波法的圖解和梯度下降法的圖解。筆者採用MindManager思維導圖軟體對上述兩種演算法進行詳細的解釋,非常形象。     希望這種方式能夠讓大家快速、準確的理解這兩種演算法的流程。 互補濾波法:

安卓中的對稱加密,非對稱加密,MD5加密的演算法

轉自:http://blog.csdn.net/fengkaungdewoniu/article/details/52846025 安卓中使用的加密演算法可以說有三種:對稱加密、非對稱加密,及MD5加密。 對稱加密: 對稱加密又稱作私鑰加密。(舉例:家裡大門開門

java 自帶的MD5、SHA1演算法演示

java程式碼:EncoderHandler.java package michael.utils; import java.security.MessageDigest; /** * blog www.micmiu.com * * @autho