當前位置:首頁 » 操作系統 » md5校驗演算法

md5校驗演算法

發布時間: 2022-07-29 18:53:58

A. 如何檢驗MD5碼

方法和詳細的操作步驟如下:

1、第一步,運行MD5驗證工具,單擊「瀏覽」選項,可以瀏覽以添加需要驗證的軟體,鏡像或視頻文件等,見下圖,轉到下面的步驟。

B. MD5驗證是什麼啊

MD5是message-digest algorithm 5(信息-摘要演算法)的縮寫,被廣泛用於加密和解密技術上,它可以說是文件的「數字指紋」。任何一個文件,無論是可執行程序、圖像文件、臨時文件或者其他任何類型的文件,也不管它體積多大,都有且只有一個獨一無二的MD5信息值,並且如果這個文件被修改過,它的MD5值也將隨之改變。因此,我們可以通過對比同一文件的MD5值,來校驗這個文件是否被「篡改」過。

MD5到底有什麼用

當我們下載了文件後,如果想知道下載的這個文件和網站的原始文件是否一模一樣,就可以給自己下載的文件做個MD5校驗。如果得到的MD5值和網站公布的相同,可確認所下載的文件是完整的。如有不同,說明你下載的文件是不完整的:要麼就是在網路下載的過程中出現錯誤,要麼就是此文件已被別人修改。為防止他人更改該文件時放入病毒,最好不要使用。

當我們用E-mail給好友發送文件時,可以將要發送文件的MD5值告訴對方,這樣好友收到該文件以後即可對其進行校驗,來確定文件是否安全。

再比如:在剛安裝好系統後可以給系統文件做個MD5校驗,過了一段時間後如果你懷疑某些文件被人換掉,那麼就可以給那些被懷疑的文件做個MD5校驗,若和從前得到的MD5校驗碼不一樣,那麼就可以肯定是有問題的。

C. MD5校驗碼

當然沒什麼大的問題!MD5

MD5的典型應用是對一段信息(Message)產生信息摘要(Message-Digest),以防止被篡改。比如,在UNIX下有很多軟體在下載的時候都有一個文件名相同,文件擴展名為.md5的文件,在這個文件中通常只有一行文本,大致結構如:
MD5 (tanajiya.tar.gz) =
這就是tanajiya.tar.gz文件的數字簽名。MD5將整個文件當作一個大文本信息,通過其不可逆的字元串變換演算法,產生了這個唯一的MD5信息摘要。為了讓讀者朋友對MD5的應用有個直觀的認識,筆者以一個比方和一個實例來簡要描述一下其工作過程:
大家都知道,地球上任何人都有自己獨一無二的指紋,這常常成為公安機關鑒別罪犯身份最值得信賴的方法;與之類似,MD5就可以為任何文件(不管其大小、格式、數量)產生一個同樣獨一無二的「數字指紋」,如果任何人對文件做了任何改動,其MD5值也就是對應的「數字指紋」都會發生變化。
我們常常在某些軟體下載站點的某軟體信息中看到其MD5值,它的作用就在於我們可以在下載該軟體後,對下載回來的文件用專門的軟體(如Windows MD5 Check等)做一次MD5校驗,以確保我們獲得的文件與該站點提供的文件為同一文件。利用MD5演算法來進行文件校驗的方案被大量應用到軟體下載站、論壇資料庫、系統文件安全等方面。
MD5的典型應用是對一段Message(位元組串)產生fingerprint(指紋),以防止被「篡改」。舉個例子,你將一段話寫在一個叫 readme.txt文件中,並對這個readme.txt產生一個MD5的值並記錄在案,然後你可以傳播這個文件給別人,別人如果修改了文件中的任何內容,你對這個文件重新計算MD5時就會發現(兩個MD5值不相同)。如果再有一個第三方的認證機構,用MD5還可以防止文件作者的「抵賴」,這就是所謂的數字簽名應用。
MD5還廣泛用於操作系統的登陸認證上,如Unix、各類BSD系統登錄密碼、數字簽名等諸多方。如在UNIX系統中用戶的密碼是以MD5(或其它類似的演算法)經Hash運算後存儲在文件系統中。當用戶登錄的時候,系統把用戶輸入的密碼進行MD5 Hash運算,然後再去和保存在文件系統中的MD5值進行比較,進而確定輸入的密碼是否正確。通過這樣的步驟,系統在並不知道用戶密碼的明碼的情況下就可以確定用戶登錄系統的合法性。這可以避免用戶的密碼被具有系統管理員許可權的用戶知道。MD5將任意長度的「位元組串」映射為一個128bit的大整數,並且是通過該128bit反推原始字元串是困難的,換句話說就是,即使你看到源程序和演算法描述,也無法將一個MD5的值變換回原始的字元串,從數學原理上說,是因為原始的字元串有無窮多個,這有點象不存在反函數的數學函數。所以,要遇到了md5密碼的問題,比較好的辦法是:你可以用這個系統中的md5()函數重新設一個密碼,如admin,把生成的一串密碼的Hash值覆蓋原來的Hash值就行了。
正是因為這個原因,現在被黑客使用最多的一種破譯密碼的方法就是一種被稱為"跑字典"的方法。有兩種方法得到字典,一種是日常搜集的用做密碼的字元串表,另一種是用排列組合方法生成的,先用MD5程序計算出這些字典項的MD5值,然後再用目標的MD5值在這個字典中檢索。我們假設密碼的最大長度為8位位元組(8 Bytes),同時密碼只能是字母和數字,共26+26+10=62個字元,排列組合出的字典的項數則是P(62,1)+P(62,2)….+P(62,8),那也已經是一個很天文的數字了,存儲這個字典就需要TB級的磁碟陣列,而且這種方法還有一個前提,就是能獲得目標賬戶的密碼MD5值的情況下才可以。這種加密技術被廣泛的應用於UNIX系統中,這也是為什麼UNIX系統比一般操作系統更為堅固一個重要原因。
[編輯本段]演算法描述
對MD5演算法簡要的敘述可以為:MD5以512位分組來處理輸入的信息,且每一分組又被劃分為16個32位子分組,經過了一系列的處理後,演算法的輸出由四個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=0x01234567,B=0x89abcdef,C=0xfedcba98,D=0x76543210。
當設置好這四個鏈接變數後,就開始進入演算法的四輪循環運算。循環的次數是信息中512位信息分組的數目。
將上面四個鏈接變數復制到另外四個變數中:A到a,B到b,C到c,D到d。
主循環有四輪(MD4隻有三輪),每輪循環都很相似。第一輪進行16次操作。每次操作對a、b、c和d中的其中三個作一次非線性函數運算,然後將所得結果加上第四個變數,文本的一個子分組和一個常數。再將所得結果向右環移一個不定的數,並加上a、b、c或d中之一。最後用該結果取代a、b、c或d中之一。
以一下是每次操作中用到的四個非線性函數(每輪一個)。
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))
(&是與,|是或,~是非,^是異或)
這四個函數的說明:如果X、Y和Z的對應位是獨立和均勻的,那麼結果的每一位也應是獨立和均勻的。
F是一個逐位運算的函數。即,如果X,那麼Y,否則Z。函數H是逐位奇偶操作符。
假設Mj表示消息的第j個子分組(從0到15),<<
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步中,ti是4294967296*abs(sin(i))的整數部分,i的單位是弧度。(4294967296等於2的32次方)
所有這些完成之後,將A、B、C、D分別加上a、b、c、d。然後用下一分組數據繼續運行演算法,最後的輸出是A、B、C和D的級聯。
當你按照我上面所說的方法實現MD5演算法以後,你可以用以下幾個信息對你做出來的程序作一個簡單的測試,看看程序有沒有錯誤。
MD5 ("") =
MD5 ("a") =
MD5 ("abc") =
MD5 ("message digest") =
MD5 ("abcdefghijklmnopqrstuvwxyz") =
MD5 ("") =

具體的一個MD5實現
/*
* md5 -- compute and check MD5 message digest.
* this version only can calculate the char string.
*
* MD5 (Message-Digest algorithm 5) is a widely used, partially
* insecure cryptographic hash function with a 128-bit hash value.
*
* Author: redraiment
* Date: Aug 27, 2008
* Version: 0.1.6
*/
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <math.h>
#define SINGLE_ONE_BIT 0x80
#define BLOCK_SIZE 512
#define MOD_SIZE 448
#define APP_SIZE 64
#define BITS 8
// MD5 Chaining Variable
#define A 0x67452301UL
#define B 0xEFCDAB89UL
#define C 0x98BADCFEUL
#define D 0x10325476UL
// Creating own types
#ifdef UINT64
# undef UINT64
#endif
#ifdef UINT32
# undef UINT32
#endif
typedef unsigned long long UINT64;
typedef unsigned long UINT32;
typedef unsigned char UINT8;
typedef struct
{
char * message;
UINT64 length;
}STRING;
const UINT32 X[4][2] = {{0, 1}, {1, 5}, {5, 3}, {0, 7}};
// Constants for MD5 transform routine.
const UINT32 S[4][4] = {
{ 7, 12, 17, 22 },
{ 5, 9, 14, 20 },
{ 4, 11, 16, 23 },
{ 6, 10, 15, 21 }
};
// F, G, H and I are basic MD5 functions.
UINT32 F( UINT32 X, UINT32 Y, UINT32 Z )
{
return ( X & Y ) | ( ~X & Z );
}
UINT32 G( UINT32 X, UINT32 Y, UINT32 Z )
{
return ( X & Z ) | ( Y & ~Z );
}
UINT32 H( UINT32 X, UINT32 Y, UINT32 Z )
{
return X ^ Y ^ Z;
}
UINT32 I( UINT32 X, UINT32 Y, UINT32 Z )
{
return Y ^ ( X | ~Z );
}
// rotates x left s bits.
UINT32 rotate_left( UINT32 x, UINT32 s )
{
return ( x << s ) | ( x >> ( 32 - s ) );
}
// Pre-processin
UINT32 count_padding_bits ( UINT32 length )
{
UINT32 div = length * BITS / BLOCK_SIZE;
UINT32 mod = length * BITS % BLOCK_SIZE;
UINT32 c_bits;
if ( mod == 0 )
c_bits = MOD_SIZE;
else
c_bits = ( MOD_SIZE + BLOCK_SIZE - mod ) % BLOCK_SIZE;
return c_bits / BITS;
}
STRING append_padding_bits ( char * argv )
{
UINT32 msg_length = strlen ( argv );
UINT32 bit_length = count_padding_bits ( msg_length );
UINT64 app_length = msg_length * BITS;
STRING string;
string.message = (char *)malloc(msg_length + bit_length + APP_SIZE / BITS);
// Save message
strncpy ( string.message, argv, msg_length );
// Pad out to mod 64.
memset ( string.message + msg_length, 0, bit_length );
string.message [ msg_length ] = SINGLE_ONE_BIT;
// Append length (before padding).
memmove ( string.message + msg_length + bit_length, (char *)&app_length, sizeof( UINT64 ) );
string.length = msg_length + bit_length + sizeof( UINT64 );
return string;
}
int main ( int argc, char *argv[] )
{
STRING string;
UINT32 w[16];
UINT32 chain[4];
UINT32 state[4];
UINT8 r[16];
UINT32 ( *auxi[ 4 ])( UINT32, UINT32, UINT32 ) = { F, G, H, I };
int roundIdx;
int argIdx;
int sIdx;
int wIdx;
int i;
int j;
if ( argc < 2 )
{
fprintf ( stderr, "usage: %s string ...\n", argv[ 0 ] );
return EXIT_FAILURE;
}
for ( argIdx = 1; argIdx < argc; argIdx++ )
{
string = append_padding_bits ( argv[ argIdx ] );
// MD5 initialization.
chain[0] = A;
chain[1] = B;
chain[2] = C;
chain[3] = D;
for ( j = 0; j < string.length; j += BLOCK_SIZE / BITS)
{
memmove ( (char *)w, string.message + j, BLOCK_SIZE / BITS );
memmove ( state, chain, sizeof(chain) );
for ( roundIdx = 0; roundIdx < 4; roundIdx++ )
{
wIdx = X[ roundIdx ][ 0 ];
sIdx = 0;
for ( i = 0; i < 16; i++ )
{
// FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
// Rotation is separate from addition to prevent recomputation.
state[sIdx] = state [ (sIdx + 1) % 4 ] +
rotate_left ( state[sIdx] +
( *auxi[ roundIdx ] )
( state[(sIdx+1) % 4], state[(sIdx+2) % 4], state[(sIdx+3) % 4]) +
w[ wIdx ] +
(UINT32)floor( (1ULL << 32) * fabs(sin( roundIdx * 16 + i + 1 )) ),
S[ roundIdx ][ i % 4 ]);
sIdx = ( sIdx + 3 ) % 4;
wIdx = ( wIdx + X[ roundIdx ][ 1 ] ) & 0xF;
}
}
chain[ 0 ] += state[ 0 ];
chain[ 1 ] += state[ 1 ];
chain[ 2 ] += state[ 2 ];
chain[ 3 ] += state[ 3 ];
}
memmove ( r + 0, (char *)&chain[0], sizeof(UINT32) );
memmove ( r + 4, (char *)&chain[1], sizeof(UINT32) );
memmove ( r + 8, (char *)&chain[2], sizeof(UINT32) );
memmove ( r + 12, (char *)&chain[3], sizeof(UINT32) );
for ( i = 0; i < 16; i++ )
printf ( "%02x", r[i] );
putchar ( '\n' );
}
return EXIT_SUCCESS;
}
/* 以上程序可以在任意一款支持ANSI C的編譯器上編譯通過 */
[編輯本段]修改MD5加密 提高網站安全
也許提到MD5時大家都很熟,但你真的是這樣嗎?了解其是如何進行散列的實際過程嗎?雖然我們一般的人是不用這樣去尋根問底,要用的時候直接去下載別人已編好的程序用就得了。
由於演算法大多的人都是知道的,所以現在網上有很多破解MD5散列值的工具,但我們搞安全的完全可以發揮我們的想像力充分地調動自己的積極性,是否想過自己也重改造一個MD5的演算法呢?讓現在所有的破解MD5的工具下課呢?因為MD5在我們網路中實在是用得太廣了,各網站要保存用戶的資料,但明文保存時又怕萬一被哪個攻擊者攻入網站,下載了資料庫,所以我們常用MD5進行散列各種重要的資料。但是現在有好多工具是可以進行簡單的破解的。
我們先來了解一下MD5這個散列演算法,然後我再一個例子說明如何提高了網站的安全性。
下邊我只是簡單的說明,x與y的所在空間就不作介紹了(x∈A,y∈B)。我們來看看一個散列演算法一般是要滿足下面三個條件之一:
1、 H是一個單向函數。即對幾乎所有的H(x)=y,已知y要求x,則在計算上是不可行的。
2、 已知x,找x′∈A,使H(x)=H(x′)在計算上是不可能的,這也就是弱無碰撞性。
3、 找一對x和x『, 而x≠x』,使H(x)=H(x′)在計算上也是不可行的,這也就是強無碰撞性。
這樣就稱為安全保密的Hash函數。下邊是對消息的散列過程:
由上邊的表大家也許看到了左邊是不是要求輸入一個初始向量IV,這也就是今天我說明的關鍵地方,這個初始向量要MD5演算法中是由A、B、C、D四個緩沖區寄存器存放的,而每一個寄存器是32比特。它們的初始值是:
a = 0x67452301
b = 0x EFCDAB89
c = 0x 98BADCFE
d = 0x 10325476
在這我們可以看到這四個16進制的值,這也可看做是一種初始的種子,如果大家對MD5的演算法過程清楚的話,我們可知在這過程在主要是一些異或、求模等的運算,對每一個分組512比特消息進行處理的,而每一分組都進行4*16次的運算,所以我有個大膽的想法,只是我們把初始值進行稍微的改變的話,那不就是變成另外的MD5散列演算法了嗎!我們知道A、B、C、D四個值共是16進制的4*8=32位,那麼我們都可計算可能被破解的概率空間,如果動得更多的話,那被破解的可能性也就越小。只要我們改變一位的話,而同時我們也不必改動演算法的其它部分,從而也不會對我們的程序進行多大的變動。是不是就找到一種新的散列演算法了呢,其實,對散列演算法有研究的就可知,美國的信息壓縮標准SHA也是與MD5有點相似(主要是指思路)。
現在介紹了這些有關的MD5知識後,我們來看看如何修改我們網站管理程序的源碼,這里我以國內有名的動網論壇DVBBS7.0說明。
我們都知道動網論壇的用戶的數據如密碼,提問的問題的答案是以MD5散列的,通常攻擊者就是下載了資料庫來進行破解而得到管理員的密碼的,默認的是放在這個路徑下的:bbs\data\dvbbs7.mdb 而我們一般是採用的是修改資料庫的名字,同時相應的修改一下conn.asp中的相關設置。
現在我們的方法是你找到這個文件\inc\md5.asp。這個頁面就是我們進行散列處理的程序,只是在這修改一下的話,我們就產生了自己的新MD5散列演算法。然後以記事本的方式打開它,找到這個地方。
看到了吧,a、b、c、d這四個值了吧,就是我們前邊談的喲,看你如何改了。隨你的便了吧!但我建議是你最好改一位就可了,還是盡量少改吧。如你可把a = 0x67452301改為a = 0x67452300這樣你就用了一個與眾不同的MD5演算法呢,這樣,哪怕就是你的資料庫被下載了,你也可以放心的用了。讓他們的破解MD5的工具見鬼去吧!
但是我要說明的是,了解MD5過程的人可能會問,你這樣改變會影響操作嗎?這個問題專家可能都很難把它論證。同時我給大家要說的是,MD5是征對所有的信息的,而我們這樣的改變,僅僅用在一個網站上的幾千個,上萬個用戶的話,應該是沒有多大問題的,但是我們要從數學上證明它這個改變後也能滿足文章開始時說的三個條件的話,確實有一定的難度,這就讓讀者去討論一下吧。
特別說明:此種改變只能用於在剛開始建站時才可,如果你中途改變的話就會出現問題。
[編輯本段]MD5的破解
2004年8月17日的美國加州聖巴巴拉的國際密碼學會議(Crypto』2004)上,來自中國山東大學的王小雲教授做了破譯MD5、HAVAL-128、 MD4和RIPEMD演算法的報告,公布了MD系列演算法的破解結果。宣告了固若金湯的世界通行密碼標准MD5的堡壘轟然倒塌,引發了密碼學界的軒然大波。
令世界頂尖密碼學家想像不到的是,破解MD5之後,2005年2月,王小雲教授又破解了另一國際密碼SHA-1。因為SHA-1在美國等國際社會有更加廣泛的應用,密碼被破的消息一出,在國際社會的反響可謂石破天驚。換句話說,王小雲的研究成果表明了從理論上講電子簽名可以偽造,必須及時添加限制條件,或者重新選用更為安全的密碼標准,以保證電子商務的安全。
MD5破解工程權威網站是為了公開徵集專門針對MD5的攻擊而設立的,網站於2004年8月17日宣布:「中國研究人員發現了完整MD5演算法的碰撞;Wang, Feng, Lai與Yu公布了MD5、MD4、HAVAL-128、RIPEMD-128幾個 Hash函數的碰撞。這是近年來密碼學領域最具實質性的研究進展。使用他們的技術,在數個小時內就可以找到MD5碰撞。……由於這個里程碑式的發現,MD5CRK項目將在隨後48小時內結束」。
在2004年8月之前,國際密碼學界對王小雲這個名字並不熟悉。2004年8月,在美國加州聖芭芭拉召開的國際密碼大會上,並沒有被安排發言的王小雲教授拿著自己的研究成果找到會議主席,沒想到慧眼識珠的會議主席破例給了她15分鍾時間來介紹自己的成果,而通常發言人只被允許有兩三分鍾的時間。王小雲及其研究同工展示了MD5、SHA-0及其他相關雜湊函數的雜湊沖撞。所謂雜湊沖撞指兩個完全不同的訊息經雜湊函數計算得出完全相同的雜湊值。根據鴿巢原理,以有長度限制的雜湊函數計算沒有長度限制的訊息是必然會有沖撞情況出現的。可是,一直以來,電腦保安專家都認為要任意製造出沖撞需時太長,在實際情況上不可能發生,而王小雲等的發現可能會打破這個必然性。就這樣,王小雲在國際會議上首次宣布了她及她的研究小組近年來的研究成果——對MD4、MD5、HAVAL-128和RIPEMD等四個著名密碼演算法的破譯結果。
在公布到第三個成果的時候,會場上已經是掌聲四起,報告不得不一度中斷。報告結束後,所有與會專家對他們的突出工作報以長時間的掌聲,有些學者甚至起立鼓掌以示他們的祝賀和敬佩。由於版本問題,作者在提交會議論文時使用的一組常數和先行標准不同,在發現這一問題之後,王小雲教授立即改變了那個常數,在很短的時間內就完成了新的數據分析,這段有驚無險的小插曲更證明了他們論文的信服力,攻擊方法的有效性,驗證了研究工作的成功。
令世界頂尖密碼學家想像不到的是,破解MD5之後,2005年2月,王小雲與其同事提出SHA-1雜湊函數的雜湊沖撞。因為SHA-1在美國等國際社會有更加廣泛的應用,密碼被破的消息一出,在國際社會的反響可謂石破天驚。換句話說,王小雲的研究成果表明了從理論上講電子簽名可以偽造,必須及時添加限制條件,或者重新選用更為安全的密碼標准,以保證電子商務的安全。
2005年8月,王小雲、姚期智,以及姚期智妻子姚儲楓(即為Knuth起名高德納的人)聯手於國際密碼討論年會尾聲部份提出SHA-1雜湊函數雜湊沖撞演演算法的改良版。此改良版使破解SHA-1時間縮短。
2006年6月8日,王小雲教授於中國科學院第13次院士大會和中國工程院第8次院士大會上以「國際通用Hash函數的破解」獲頒陳嘉庚科學獎信息技術科學獎

D. md5校驗工具是干什麼用的

MD5校驗工具,其實就是一個MD5加密計算的軟體。軟體可以計算得到文件的MD5值,再跟官方給出的MD5值進行對比沒有差別就說明軟體沒有經過修改了。

MD5簡單來說是可以說是文件的「數字指紋」,常用於文件的加密和解密。任何一個文件都有且只有一個獨一無二的MD5信息值,並且如果這個文件被修改過,它的MD5值也將隨之改變。

因此,我們可以通過對比同一文件的MD5值,來校驗這個文件是否被「篡改」過。這就需要使用md5校驗工具了。


(4)md5校驗演算法擴展閱讀

MD5演算法原理:

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

MD5校驗應用原理舉例:

例如客戶往我們數據中心同步一個文件,該文件使用MD5校驗,那麼客戶在發送文件的同時會再發一個存有校驗碼的文件,我們拿到該文件後做MD5運算,得到的計算結果與客戶發送的校驗碼相比較,如果一致則認為客戶發送的文件沒有出錯,否則認為文件出錯需要重新發送。

E. 什麼是MD5值校驗

windows
平台上,可以網路
md5
,下載工具進行驗證;如果是
win10,可以到應用商店裡找;如果是
ubuntu,它自帶
md5sum
工具。
message
digest
algorithm
md5(中文名為消息摘要演算法第五版)為計算機安全領域廣泛使用的一種散列函數,用以提供消息的完整性保護。
一致性驗證
比如下載伺服器針對一個文件預先提供一個md5值,用戶下載完該文件後,用我這個演算法重新計算下載文件的md5值,通過比較這兩個值是否相同,就能判斷下載的文件是否出錯,或者說下載的文件是否被篡改了。
數字簽名
舉個例子,你將一段話寫在一個叫
readme.txt文件中,並對這個readme.txt產生一個md5的值並記錄在案,然後你可以傳播這個文件給別人,別人如果修改了文件中的任何內容,你對這個文件重新計算md5時就會發現(兩個md5值不相同)。如果再有一個第三方的認證機構,用md5還可以防止文件作者的「抵賴」,這就是所謂的數字簽名應用。
安全訪問認證
。如在unix系統中用戶的密碼是以md5(或其它類似的演算法)經hash運算後存儲在文件系統中。當用戶登錄的時候,系統把用戶輸入的密碼進行md5
hash運算,然後再去和保存在文件系統中的md5值進行比較,進而確定輸入的密碼是否正確。通過這樣的步驟,系統在並不知道用戶密碼的明碼的情況下就可以確定用戶登錄系統的合法性。這可以避免用戶的密碼被具有系統管理員許可權的用戶知道。

F. MD5驗證是什麼意思

MD5校驗和(checksum)通過對接收的傳輸數據執行散列運算來檢查數據的正確性。

MD5,是一個將任意長度的數據字元串轉化成短的固定長度的值的單向操作。任意兩個字元串不應有相同的散列值(即,有「很大可能」是不一樣的,並且要人為地創造出來兩個散列值相同的字元串應該是困難的)。

一個 MD5校驗和(checksum)通過對接收的傳輸數據執行散列運算來檢查數據的正確性。計算出的散列值拿來和隨數據傳輸的散列值比較。

如果兩個值相同,說明傳輸的數據完整無誤、沒有被竄改過(前提是散列值沒有被竄改),從而可以放心使用。

(6)md5校驗演算法擴展閱讀:

MD5校驗可以應用在多個領域,比如說機密資料的檢驗,下載文件的檢驗,明文密碼的加密等。

MD5應用

一致性驗證

MD5的典型應用是對一段信息(Message)產生信息摘要(Message-Digest),以防止被篡改。比如,在Unix下有很多軟體在下載的時候都有一個文件名相同,文件擴展名為.md5的文件,在這個文件中通常只有一行文本,大致結構如:

MD5 (tanajiya.tar.gz) =

這就是tanajiya.tar.gz文件的數字簽名。MD5將整個文件當作一個大文本信息,通過其不可逆的字元串變換演算法,產生了這個唯一的MD5信息摘要。

文件的MD5值就像是這個文件的「數字指紋」。每個文件的MD5值是不同的,如果任何人對文件做了任何改動,其MD5值也就是對應的「數字指紋」就會發生變化。

比如下載伺服器針對一個文件預先提供一個MD5值,用戶下載完該文件後,用我這個演算法重新計算下載文件的MD5值,通過比較這兩個值是否相同,就能判斷下載的文件是否出錯,或者說下載的文件是否被篡改了。

MD5實際上是一種有損壓縮技術,壓縮前文件一樣MD5值一定一樣,反之MD5值一樣並不能保證壓縮前的數據是一樣的。在密碼學上發生這樣的概率是很小的,所以MD5在密碼加密領域有一席之地。

專業的黑客甚至普通黑客也可以利用MD5值實際是有損壓縮技術這一原理,將MD5的逆運算的值作為一張表俗稱彩虹表的散列表來破解密碼。

利用MD5演算法來進行文件校驗的方案被大量應用到軟體下載站、論壇資料庫、系統文件安全等方面。

數字簽名

MD5的典型應用是對一段Message(位元組串)產生fingerprint(指紋),以防止被「篡改」。

舉個例子,將一段話寫在一個叫 readme.txt文件中,並對這個readme.txt產生一個MD5的值並記錄在案,然後你可以傳播這個文件給別人,別人如果修改了文件中的任何內容,你對這個文件重新計算MD5時就會發現(兩個MD5值不相同)。

如果再有一個第三方的認證機構,用MD5還可以防止文件作者的「抵賴」,這就是所謂的數字簽名應用。

安全訪問認證

MD5還廣泛用於操作系統的登陸認證上,如Unix、各類BSD系統登錄密碼、數字簽名等諸多方面。如在Unix系統中用戶的密碼是以MD5(或其它類似的演算法)經Hash運算後存儲在文件系統中。

G. md5校驗的原理

以一個比方和一個實例來簡要描述一下其工作過程: 大家都知道,地球上任何人都有自己獨一無二的指紋,這常常成為公安機關鑒別罪犯身份最值得信賴的方法;與之類似,MD5就可以為任何文件(不管其大小、格式、數量)產生一個同樣獨一無二的「數字指紋」,如果任何人對文件做了任何改動,其MD5值也就是對應的「數字指紋」都會發生變化。 我們常常在某些軟體下載站點的某軟體信息中看到其MD5值,它的作用就在於我們可以在下載該軟體後,對下載回來的文件用專門的軟體(如Windows MD5Check等)做一次MD5校驗,以確保我們獲得的文件與該站點提供的文件為同一文件。利用MD5演算法來進行文件校驗的方案被大量應用到軟體下載站、論壇資料庫、系統文件安全等方面。

H. 如何進行MD5驗證

我認為:
MD5的全稱是Message-Digest Algorithm 5(信息-摘要演算法),在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L. Rivest開發出來,經MD2、MD3和MD4發展而來。它的作用是讓大容量信息在用數字簽名軟體簽署私人密匙前被"壓縮"成一種保密的格式(就是把一個任意長度的位元組串變換成一定長的大整數)。不管是MD2、MD4還是MD5,它們都需要獲得一個隨機長度的信息並產生一個128位的信息摘要。雖然這些演算法的結構或多或少有些相似,但MD2的設計與MD4和MD5完全不同,那是因為MD2是為8位機器做過設計優化的,而MD4和MD5卻是面向32位的電腦。這三個演算法的描述和C語言源代碼在Internet RFCs 1321中有詳細的描述http://www.ietf.org/rfc/rfc1321.txt),這是一份最權威的文檔,由Ronald L. Rivest在1992年8月向IEFT提交。

Rivest在1989年開發出MD2演算法。在這個演算法中,首先對信息進行數據補位,使信息的位元組長度是16的倍數。然後,以一個16位的檢驗和追加到信息末尾。並且根據這個新產生的信息計算出散列值。後來,Rogier和Chauvaud發現如果忽略了檢驗和將產生MD2沖突。MD2演算法的加密後結果是唯一的--既沒有重復。

為了加強演算法的安全性,Rivest在1990年又開發出MD4演算法。MD4演算法同樣需要填補信息以確保信息的位元組長度加上448後能被512整除(信息位元組長度mod 512 = 448)。然後,一個以64位二進製表示的信息的最初長度被添加進來。信息被處理成512位Damg?rd/Merkle迭代結構的區塊,而且每個區塊要通過三個不同步驟的處理。Den Boer和Bosselaers以及其他人很快的發現了攻擊MD4版本中第一步和第三步的漏洞。Dobbertin向大家演示了如何利用一部普通的個人電腦在幾分鍾內找到MD4完整版本中的沖突(這個沖突實際上是一種漏洞,它將導致對不同的內容進行加密卻可能得到相同的加密後結果)。毫無疑問,MD4就此被淘汰掉了。

盡管MD4演算法在安全上有個這么大的漏洞,但它對在其後才被開發出來的好幾種信息安全加密演算法的出現卻有著不可忽視的引導作用。除了MD5以外,其中比較有名的還有SHA-1、RIPE-MD以及HAVAL等。

一年以後,即1991年,Rivest開發出技術上更為趨近成熟的MD5演算法。它在MD4的基礎上增加了"安全-帶子"(Safety-Belts)的概念。雖然MD5比MD4稍微慢一些,但卻更為安全。這個演算法很明顯的由四個和MD4設計有少許不同的步驟組成。在MD5演算法中,信息-摘要的大小和填充的必要條件與MD4完全相同。Den Boer和Bosselaers曾發現MD5演算法中的假沖突(Pseudo-Collisions),但除此之外就沒有其他被發現的加密後結果了。

Van Oorschot和Wiener曾經考慮過一個在散列中暴力搜尋沖突的函數(Brute-Force Hash Function),而且他們猜測一個被設計專門用來搜索MD5沖突的機器(這台機器在1994年的製造成本大約是一百萬美元)可以平均每24天就找到一個沖突。但單從1991年到2001年這10年間,竟沒有出現替代MD5演算法的MD6或被叫做其他什麼名字的新演算法這一點,我們就可以看出這個瑕疵並沒有太多的影響MD5的安全性。上面所有這些都不足以成為MD5的在實際應用中的問題。並且,由於MD5演算法的使用不需要支付任何版權費用的,所以在一般的情況下(非絕密應用領域。但即便是應用在絕密領域內,MD5也不失為一種非常優秀的中間技術),MD5怎麼都應該算得上是非常安全的了。

I. Md5是什麼MD5怎麼校驗Md5校驗工具怎麼用

,MD5全名Message-Digest Algorithm 5(信息-摘要演算法)是一種不可逆的加密演算法。

那麼MD5校驗又是怎麼回事呢?
一般軟體或者說文件都有自己的固定文件格式或者架構信息,說簡單一點就是。」世界上沒有完全相同的2片葉子」 ,因為MD5是一種不可逆的加密演算法。

那麼對於某些網上公開下載的軟體,視頻,尤其是鏡像文件。如果被修改了可能會導致用不了或者其他的問題,發布者鏡像MD5演算法計算一組數值。讓下載的用戶進行MD5數值對比,也就是MD5校驗啦。由於MD5加密不可逆算,如果數值一樣,那就表示文件沒有被修改的。反之,則被修改了
MD5校驗工具,其實就是一個MD5加密計算的軟體啦。把下載好的軟體或工具拖動放到軟體裡面計算然後得到軟體的MD5值。

下面我們到網上去搜索」MD5校驗工具「下載一個
安裝好之後,運行MD5校驗工具。一般都會是下面這個圖片這種格局顯示啦,點擊」瀏覽」選項,可以瀏覽添加你需要校驗的軟體,鏡像或視頻文件等等
MD5校驗---下載軟體,記錄MD5值
打開搜索一個鏡像,比如win7旗艦版。我找到下載該軟體的文件系統信息MD5值如下圖( 注意下載軟體之前把這個MD5數值最好拷貝截圖下來,待會軟體下載好之後需要進行驗證的喔)
步驟閱讀
下面我們就下載找一個範例吧,你們自己可以下載進行測試哈。不一定是光碟的,只要下載提供者有提供MD5建議都嘗試校驗一下。好的就對比一下我剛剛的那個鏡像文件吧,點擊瀏覽進行添加文件

添加好文件之後,md5校驗會自動開始計算。計算的時間,根據文件的大小和壓縮包內的數量不同。稍等片刻,校驗好了之後,如下圖會出現當前下載的MD5和sha1值。
對比一下之前的那個備份的,如果相同表示文件沒有被修改過,如果不同,那建議不要使用
MD5加密是一直復雜的不可逆的加密演算法技術,通過MD5校驗可以有效的檢測下載資源的軟體,鏡像等資源。就不會出現,下載了一晚上,某X大片後來發現居然是 「葫蘆娃」的悲劇。O(∩_∩)O哈哈~

熱點內容
linux的yes 發布:2025-03-16 04:38:20 瀏覽:832
誅仙腳本吧 發布:2025-03-16 04:31:00 瀏覽:37
java選擇文件 發布:2025-03-16 04:29:20 瀏覽:825
android手機號碼獲取 發布:2025-03-16 04:14:42 瀏覽:873
為什麼沒有dns伺服器可以上網 發布:2025-03-16 04:13:04 瀏覽:647
電腦快速伺服器代碼怎麼查 發布:2025-03-16 03:58:26 瀏覽:111
電腦虛榮伺服器 發布:2025-03-16 03:56:48 瀏覽:116
android游戲安裝 發布:2025-03-16 03:50:08 瀏覽:330
翻杯子演算法 發布:2025-03-16 03:34:31 瀏覽:603
ftp後台密碼怎麼設置 發布:2025-03-16 03:33:08 瀏覽:361