md5解密網站源碼
1. 急求 MD5的加密解密演算法,用C++實現的源代碼 高分答謝
要代碼,還是要相關的解釋資料?
---------------------------------
要代碼的話:
兩個文件:
--------------------------
1. md5.h:
#pragma once
typedef unsigned long int UINT32;
typedef unsigned short int UINT16;
/* MD5 context. */
typedef struct {
UINT32 state[4]; /* state (ABCD) */
UINT32 count[2]; /* number of bits, molo 2^64 (lsb first) */
unsigned char buffer[64]; /* input buffer */
} MD5_CTX;
void MD5Init (MD5_CTX *);
void MD5Update (MD5_CTX *, unsigned char *, unsigned int);
void MD5Final (unsigned char [16], MD5_CTX *);
--------------------------
2. md5.cpp:
#include "md5.h"
#include "memory.h"
#define S11 7
#define S12 12
#define S13 17
#define S14 22
#define S21 5
#define S22 9
#define S23 14
#define S24 20
#define S31 4
#define S32 11
#define S33 16
#define S34 23
#define S41 6
#define S42 10
#define S43 15
#define S44 21
static void MD5Transform (UINT32 a[4], unsigned char b[64]);
static void Encode (unsigned char *, UINT32 *, unsigned int);
static void Decode (UINT32 *, unsigned char *, unsigned int);
static unsigned char PADDING[64] = {
0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
#define H(x, y, z) ((x) ^ (y) ^ (z))
#define I(x, y, z) ((y) ^ ((x) | (~z)))
#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
#define FF(a, b, c, d, x, s, ac) { \
(a) += F ((b), (c), (d)) + (x) + (UINT32)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
#define GG(a, b, c, d, x, s, ac) { \
(a) += G ((b), (c), (d)) + (x) + (UINT32)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
#define HH(a, b, c, d, x, s, ac) { \
(a) += H ((b), (c), (d)) + (x) + (UINT32)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
#define II(a, b, c, d, x, s, ac) { \
(a) += I ((b), (c), (d)) + (x) + (UINT32)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
void MD5Init (MD5_CTX *context)
{
context->count[0] = context->count[1] = 0;
context->state[0] = 0x67452301;
context->state[1] = 0xefcdab89;
context->state[2] = 0x98badcfe;
context->state[3] = 0x10325476;
}
void MD5Update (MD5_CTX *context, unsigned char *input, unsigned int inputLen)
{
unsigned int i, index, partLen;
index = (unsigned int)((context->count[0] >> 3) & 0x3F);
if ((context->count[0] += ((UINT32)inputLen << 3))
< ((UINT32)inputLen << 3))
context->count[1]++;
context->count[1] += ((UINT32)inputLen >> 29);
partLen = 64 - index;
if (inputLen >= partLen) {
memcpy((unsigned char *)&context->buffer[index], (unsigned char *)input, partLen);
MD5Transform (context->state, context->buffer);
for (i = partLen; i + 63 < inputLen; i += 64)
MD5Transform (context->state, &input[i]);
index = 0;
}
else
i = 0;
memcpy((unsigned char *)&context->buffer[index], (unsigned char *)&input[i],
inputLen-i);
}
void MD5Final (unsigned char digest[16], MD5_CTX * context)
{
unsigned char bits[8];
unsigned int index, padLen;
Encode (bits, context->count, 8);
index = (unsigned int)((context->count[0] >> 3) & 0x3f);
padLen = (index < 56) ? (56 - index) : (120 - index);
MD5Update (context, PADDING, padLen);
MD5Update (context, bits, 8);
Encode (digest, context->state, 16);
memset ((unsigned char *)context, 0, sizeof (*context));
}
static void MD5Transform (UINT32 state[4], unsigned char block[64])
{
UINT32 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
Decode (x, block, 64);
/* Round 1 */
FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */
FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */
FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */
FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */
FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */
FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */
FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */
FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */
FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */
FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */
FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
/* Round 2 */
GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */
GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */
GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */
GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */
GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */
GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */
GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */
GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */
GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */
GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */
GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */
GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
/* Round 3 */
HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */
HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */
HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */
HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */
HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */
HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */
HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */
HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */
HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */
HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */
/* Round 4 */
II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */
II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */
II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */
II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */
II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */
II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */
II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */
II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */
II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */
II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */
state[0] += a;
state[1] += b;
state[2] += c;
state[3] += d;
memset ((unsigned char *)x, 0, sizeof (x));
}
static void Encode (unsigned char *output, UINT32 *input, unsigned int len)
{
unsigned int i, j;
for (i = 0, j = 0; j < len; i++, j += 4) {
output[j] = (unsigned char)(input[i] & 0xff);
output[j+1] = (unsigned char)((input[i] >> 8) & 0xff);
output[j+2] = (unsigned char)((input[i] >> 16) & 0xff);
output[j+3] = (unsigned char)((input[i] >> 24) & 0xff);
}
}
static void Decode (UINT32 *output, unsigned char *input, unsigned int len)
{
unsigned int i, j;
for (i = 0, j = 0; j < len; i++, j += 4)
output[i] = ((UINT32)input[j]) | (((UINT32)input[j+1]) << 8) |
(((UINT32)input[j+2]) << 16) | (((UINT32)input[j+3]) << 24);
}
--------------------------
就這兩個文件。使用的時候把它們加入工程或者makefile,調用時包含md5.h即可,給個簡單的例子,輸入一個字元串然後計算它的md5值並輸出,在VC6.0和GCC4.4下測試通過:
#include <stdio.h>
#include <string.h>
#include "md5.h"
int main ()
{
char tmp[128];
unsigned char digest[16];
MD5_CTX context;
scanf("%s",tmp);
MD5Init (&context);
MD5Update (&context, (unsigned char*)tmp, strlen(tmp));
MD5Final (digest,&context);
printf("MD5Value:");
for(int i=0; i<16; ++i)
{
printf("%02X",digest[i]);
}
printf("\n");
return 0;
}
2. 今天偶然看見http://www.cmd5.com MD5加密解密 這是什麼啊
md5是對密碼加密的一種演算法,這個網站是可以通過md5這個演算法對明文的密碼進行加密、或者對已經加密過的密文進行解密的一個在線網站。
3. md5加密密碼都能破解嗎
可以破解,有md5解密的網站,但一般都是用暴力破解。
MD5是什麼?
Message
Digest
Algorithm
MD5(中文名為消息摘要演算法第五版)為計算機安全領域廣泛使用的一種散列函數,用以提供消息的完整性保護。該演算法的文件號為RFC
1321(R.Rivest,MIT
Laboratory
for
Computer
Science
and
RSA
Data
Security
Inc.
April
1992)MD5最廣泛被用於各種軟體的密碼認證和鑰匙識別上。通俗的講就是人們講的序列號。
常常在某些軟體下載站點的某軟體信息中看到其MD5值,它的作用就在於可以在下載該軟體後,對下載回來的文件用專門的軟體(如Windows
MD5
Check等)做一次MD5校驗,以確保獲得的文件與該站點提供的文件為同一文件。利用MD5演算法來進行文件校驗的方案被大量應用到軟體下載站、論壇
資料庫、系統文件安全等方面。
普通MD5密文的破解
隨著那些在線MD5密文破解網站的興起,一些常用
的MD5密碼都能在1秒鍾之內破解。即使是一些較為復雜的,也能夠通過破解網站的後台破解系統進行掛機破解。因此,MD5加密已經不存在神秘感,破解亦易
如反掌。
破解簡單MD5碼
假設我們的密碼為admin,那麼經過MD5加密得到密文為:7a57a5a743894a0e(16位)、(32位)。用在線破解網站來破解下密碼原文,打開某MD5在線破解網站,
將16位或者32位密文填入到文本框中,點擊「解密」按鈕,不到一秒鍾密碼原文就出來了。
4. 32位MD5可以解密嗎
可以解密的,以下兩個網站即可解密。你給的不是標準的MD5值,可能源碼被修改後加密所得的值。www.cmd5.com/ www.md5.org.cn/ 下面的網址有ASP源碼,MD5在線破解(轉換)之資料庫查詢工具,如果你想在本地使用,需要IIS支持。 http://www.newasp.net/code/asp/21696.html
5. 在線MD5解密
d5密文破解(解密)可以說是網路攻擊中的一個必不可少的環節,是黑客工具中的一個重要「輔助工具」。md5解密主要用於網路攻擊,在對網站等進行入侵過程,有可能獲得管理員或者其他用戶的賬號和密碼值(md5加密後的值)。獲得的密碼值有兩種情況,一種是明文,另外一種就是對明文進行了加密。如果密碼值是加密的,這個時候就需要對密碼值進行判斷,如果是採取md5加密,則可以通過MD5Crack3等軟體進行破解。王小雲教授的md5密碼碰撞破解演算法沒有公布,因此目前Md5解密方式主要採取暴力破解,
即軟體通過演算法生成字典,然後使用md5函數加密該字典中的值形成密文,接著跟需要破解的密文進行比較,如果相同則認為破解成功。目前網上有很多網站提供md5加密或者加密值查詢,將加密後的md5值,輸入到網站中,如果網站資料庫中存在該md5,則該值對應的md5加密前的值就為密碼。本案例介紹如何使用MD5Crack3以及一些在線的網站來進行破解;MD5Crack3是阿獃寫的一款md5密碼破解軟體,其網站地址:http://www.adintr.com/subject/mdcrk/index.htm,目前已經發布了MD5Crack4.0版本,也可以到我的blog(http://simeon.blog.51cto.com/18680/144558)去下載。
(一)在線生成md5密碼值
1.有關md5加解密知識
Md5密文破解(解密)可以說是網路攻擊中的一個必不可少的環節,是黑客工具中的一個重要「輔助工具」。md5解密主要用於網路攻擊,在對網站等進行入侵過程,有可能獲得管理員或者其他用戶的賬號和密碼值(md5加密後的值)。獲得的密碼值有兩種情況,一種是明文,另外一種就是對明文進行了加密。如果密碼值是加密的,這個時候就需要對密碼值進行判斷,如果是採取md5加密,則可以通過MD5Crack4等軟體進行破解。王小雲教授的md5密碼碰撞破解演算法沒有公布,因此目前Md5解密方式主要採取暴力破解,
即軟體通過演算法生成字典,然後使用md5函數加密該字典中的值形成密文,接著跟需要破解的密文進行比較,如果相同則認為破解成功。目前網上有很多網站提供md5加密或者加密值查詢,將加密後的md5值,輸入到網站中,如果網站資料庫中存在該md5,則該值對應的md5加密前的值就為密碼。
2.通過cmd5網站生成md5密碼
在瀏覽器中輸入地址「http://www.cmd5.com/」,在輸入框中輸入想要加密的原始密碼,然後單擊「md5加密或解密」按鈕即可,如圖1所示,原始密碼為「goodman88」,加密後的密碼值為:
MD5(goodman88,32)
=
MD5(goodman88,16)
=
15259023faa219f5
圖1
md5加密
作為實驗數據,我們在生成一組生日的md5密碼如下:
MD5(19801230,32)
=
MD5(19801230,16)
=
336a8eb3ebc1e42e
(二)在線破解md5密碼值
1.通過cmd5網站破解md5密碼
在cmd5網站的輸入框中輸入剛才加密後的md5
32值「」,然後單擊「md5加密或解密」按鈕即可,如圖2所示,未能成功破解。
圖2
通過cmd5網站未能破解md5密碼
將第二個生日加密後的md5值「」,放入cmd5網站進行破解,很快其結果就出來了,如圖3所示。
圖3
破解簡單的數字密碼
2.在線md5破解網站收費破解高難度的md5密碼值
一些在線網站提供的md5密碼破解只能破解已經收錄和一些簡單的密碼,對於稍微復雜一點的密碼,都不容易被破解;而且對一些稍微有點難度的md5密碼值,如果資料庫中有,在線網站是要求付費的,例如用一個復雜一點的md5值進行破解,如圖4所示,提示找到,但是要求進行付費。
圖4要求付費才能查看md5密碼值
(三)使用字典暴力破解md5密碼值
1.再次生成md5密碼值
再在cmd5網站生成原密碼為「jimmychu246」的md5密碼值為:
MD5(jimmychu246,32)
=
MD5(jimmychu246,16)
=
b6b2e5aaca9fd171
直接運行md5crack4,運行界面如圖5所示。
圖5
md5crack4程序主界面
2.在md5crack4中驗證md5值
將需要破解的md5值()粘貼到「破解單個密文(Single
Cryptograph)」輸入框中,如圖6所示,如果該md5值是正確的,則會在「破解單個密文」輸入框下方顯示黑色的「有效(valid)」兩個字,否則顯示「valid」為灰色。
3.使用字典進行破解
在「字元設置(Plaintext
Setting)」中選擇「字典(Dictionary)」,並在「N0.1」、「N0.2」以及「N0.3」中選擇三個不同的字典,選擇完畢後,單擊「Start」按鈕開始md5破解,破解結束後會給出相應的提示,如圖7所示,在本案例中使用字典破解成功,在Result中顯示破解的密碼為「jimmychu246」。
圖7使用字典進行破解
4.「使用字元集(Char
Muster)」中的數字進行破解
將上面生成的數字md5值「336a8eb3ebc1e42e」放入單一md5密碼破解輸入框中,選中「Char
Muster」後,依次可以選擇「Number」、「lowercase」、「majuscule」、「special
char」以及「custom」進行破解,在本例中使用數字進行破擊,因此
「最小長度(Min
Length)」中設置為「1」,「最大長度(Max
Length)」中設置為「8」,然後單擊「開始」按鈕,使用數字進行md5破解,嘗試破解密碼位數從1~9999999之間的所有數字組合,如圖8所示,其密碼值破解成功,破解結果為「336a8eb3ebc1e42e
--->
[19801230]」。
圖8
使用數字進行破解
&說明
(1)在md5crack4中還可以定義數字、大小字母、特殊字元的組合來進行破解。
(2)如果計算機配置比較好,可以設置更多線程。
(3)如果自定義進行破解,建議先選擇使用數字,然後依次是數字、大小字母、特殊字元的組合。破解時先易後難,否則破解時間太長。
(4)在md5crack4還可以「使用插件」進行破解。
(5)在md5crack4中還可以設置軟體顯示的語言版本,一共有中文簡體和英語兩個版本,單擊主界面中的設置(Option),即可進行設置,如圖9所示。
圖9
設置md5crack4
5.一次破解多個密碼
將需要破解的md5密碼全部存放到一個txt文件中,每一個密碼獨立一行,然後在md5crack4中單擊「破解多個密文」,選擇剛才編輯的md5密碼文件,如圖10所示,選擇一種破解方式,在本案例中選擇使用數字字典進行破解,最後單擊「開始」按鈕開始破解。
圖10
破解多個md5密碼值
在md5crack4右下方會顯示破解結果,單擊「日誌」可以查看md5值校驗等日誌信息,單擊「結果」可以查看破解的結果,如圖11所示,在結果中會將md5值與原始密碼進行一一對應。
圖11
破解結果
Md5加解密是網路攻防中必須掌握的知識,本文介紹了使用md5cracker以及通過網站來對md5值進行破解,對md5破解,可以先在一些md5破解網站進行破解,如果未能破解,則可以在本地通過md5cracker進行破解。
ps:轉載至安天365
6. 免費的MD5在線解密網站是多少
原文:jyxh4808
就是用樓上朋友給的網站解密的