邪恶八进制信息安全团队技术讨论组's Archiver

AnMeiHong 2005-5-3 13:59

[原创]MD5计算器

文章作者:赛冰河 [E.S.T]
信息来源:邪恶八进制信息安全团队([url]www.eviloctal.com[/url])

前几天看到论坛有人在说32与16的关系,好多网站只取16位只是为了方便,
今晚查了下资料,把32的MD5与16位的搞清楚了,16是只是截取了32位的中间部分

如果需要源代码(VC):请联系

截图如下:

[img]http://blog.csdn.net/images/blog_csdn_net/amh/a.bmp.jpg[/img]

xyz24k 2005-9-22 10:32

呵呵,赛冰河,我很喜欢你 编写的这个 MD5计算器 的软件,能给我发一份源代码吗?
我会 好好学习研究的,谢谢您!! ^_^  偶的 信箱: [email]xyz24k@sina.com[/email]

流浪狼 2005-9-22 10:36

[quote][b]下面是引用赛冰河于2005-05-03 13:59发表的[原创]MD5计算器:[/b]

今晚查了下资料,把32的MD5与16位的搞清楚了,16是只是截取了32位的中间部分[/quote]



我记得好像以前有个帖子,我早有在里面说16位是截取了32位的中间部分,结果我后面有人跟帖说不是的,只要转换一下加密方式,就不是这样了!最后好像也没什么人说明到底是怎么样

狙击鹰 2005-9-22 11:03

我用你的计算器算的结果和老兵之前写那个MD5计算器的结果不大一样阿

现在在学校机房没有老兵的那个计算器,

回到宿舍我再发截图上来

风泽 2005-9-22 12:01

冰河兄的MD5计算器的确有问题,加密一些符号的时候计算出来的是错误的值。
比如加密 $ 出来的结果:
32:16a27f78e766afb3632faae062280b4a
16:e766afb3632faae0

我用我的EST-EvilHsu计算出来是:
32:c3e97dd6e97fb5125688c97f36720cbe
16:e97fb5125688c97f

再用其他朋友写的来测试证明我的结果是正确的。

风泽 2005-9-22 12:02

还有,不知道为什么冰河写的软件这么大?加了壳还这么大?难道是软件皮肤?还不如自己找点资料用API画呢

kevin1986 2005-9-22 12:28

风泽的是应该是正确的.....
[quote]
C:\Program Files\MySQL\MySQL Server 5.0\bin>mysql -uroot -p -hlocalhost
Enter password: ****
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 5.0.12-beta-nt

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> select md5('$')
   -> ;
+----------------------------------+
| md5('$')                 |
+----------------------------------+
| c3e97dd6e97fb5125688c97f36720cbe |
+----------------------------------+
1 row in set (0.09 sec)

mysql>
[/quote]

32: c3e97dd6e97fb5125688c97f36720cbe

16: e97fb5125688c97f

冰河的,应该是那几个基数改改过了一下吧.不晓得了

狙击鹰 2005-9-22 13:44

[quote][b]下面是引用狙击鹰于2005-09-22 11:03发表的:[/b]
我用你的计算器算的结果和老兵之前写那个MD5计算器的结果不大一样阿

现在在学校机房没有老兵的那个计算器,

回到宿舍我再发截图上来[/quote]
不给我发图上来的阿

自己找个地方去.......

[img]http://www.xyx-tattoo.com/bbs/images/123.jpg[/img]

风泽 2005-9-22 14:37

应该不是基数改了,我估计他对要加密的值操作有错误。

[attach]431[/attach]
第一次加密MD5这个值是错误的,以后都是正确的。

加密很不稳定。我又加密了一次 $ 结果和上次又不一样了。
[attach]432[/attach]

史翔 2005-9-22 22:27

用js就可以完成,如果放在网站上,使用起来会更方面些,我手头上有代码

chinaren 2005-9-27 13:42

t1D92nxf4TQ2aaurQI3BBA
今天遇到这种MD5密码,不是16位也不是32位,但确实存在,是邮箱加密后的密码

史翔 2005-9-27 13:57

那是MD5么,会不会象serv-u密码那样

chinaren 2005-9-27 18:47

[quote][b]下面是引用史翔于2005-09-27 13:57发表的:[/b]
那是MD5么,会不会象serv-u密码那样[/quote]

不是serv-u密码,是eyou邮箱的密码,从excel表里看到的,前面有{md5} 后面有==
中间就是密码了,难道没人知道这是怎么加密的吗?

狙击鹰 2005-9-28 13:36

[quote][b]下面是引用chinaren于2005-09-27 13:42发表的:[/b]
t1D92nxf4TQ2aaurQI3BBA
今天遇到这种MD5密码,不是16位也不是32位,但确实存在,是邮箱加密后的密码[/quote]


读代码咯

貌似DVBBS的TRUEPASSWORD也是这个样子的

意识 2005-9-28 21:03

16位的md5java怎么写木有想出来

风泽 2005-9-28 21:10

[quote][b]下面是引用chinaren于2005-09-27 13:42发表的:[/b]
t1D92nxf4TQ2aaurQI3BBA
今天遇到这种MD5密码,不是16位也不是32位,但确实存在,是邮箱加密后的密码[/quote]

邮箱密码是用base64加密后提交的啊~

chinaren 2005-9-29 10:01

[quote][b]下面是引用风泽于2005-09-28 21:10发表的:[/b]


邮箱密码是用base64加密后提交的啊~[/quote]

base64加密的可以还原吗?

yezhan 2005-9-29 12:59

DLL的源代码:Base64Dll.asm

;***********************************************
;程序名称:演示Base64编码/解码原理
;作者:罗聪
;日期:2002-9-14
;出处:[url]http://laoluoc.yeah.net[/url](老罗的缤纷天地)
;注意事项:如欲转载,请保持本程序的完整,并注明:
;转载自“老罗的缤纷天地”([url]http://laoluoc.yeah.net[/url])
;***********************************************

.386
.model flat, stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib

DllEntry proto :HINSTANCE, :DWORD, :DWORD
Base64Encode proto :DWORD, :DWORD
Base64Decode proto :DWORD, :DWORD

.data
;Base64 -> ASCII mapping table
base64_alphabet db "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="

;ASCII -> Base64 mapping table
base64table db 43 dup (255)
db 62,255,255,255,63,52,53,54,55,56,57,58,59,60,61,255
db 255,255,0,255,255,255,0,1,2,3,4,5,6,7,8,9,10,11,12,13
db 14,15,16,17,18,19,20,21,22,23,24,25,255,255,255,255
db 255,255,26,27,28,29,30,31,32,33,34,35,36,37,38
db 39,40,41,42,43,44,45,46,47,48,49,50,51
db 132 dup (255)

.code
DllEntry proc hInst: HINSTANCE, reason: DWORD, reserved1: DWORD
mov eax, TRUE
ret
DllEntry endp


;**********************************************************
;函数功能:进行Base64编码
;参数:
; source = 传入的字符串
; destination = 返回的编码
;**********************************************************
Base64Encode proc uses ebx edi esi source:DWORD, destination:DWORD
LOCAL sourcelen:DWORD

invoke lstrlen, source
mov sourcelen, eax

mov esi, source
mov edi, destination
@@base64loop:
xor eax, eax
.if sourcelen == 1
lodsb ;source ptr + 1
mov ecx, 2 ;bytes to output = 2
mov edx, 03D3Dh ;padding = 2 byte
dec sourcelen ;length - 1
.elseif sourcelen == 2
lodsw ;source ptr + 2
mov ecx, 3 ;bytes to output = 3
mov edx, 03Dh ;padding = 1 byte
sub sourcelen, 2 ;length - 2
.else
lodsd
mov ecx, 4 ;bytes to output = 4
xor edx, edx ;padding = 0 byte
dec esi ;source ptr + 3 (+4-1)
sub sourcelen, 3 ;length - 3
.endif

xchg al,ah ;flip eax completely
rol eax, 16 ;can this be done faster
xchg al,ah

@@:
push eax
and eax, 0FC000000h ;get the last 6 high bits
rol eax, 6 ;rotate them into al
mov al, byte ptr [offset base64_alphabet + eax] ;get encode character
stosb ;write to destination
pop eax
shl eax, 6 ;shift left 6 bits
dec ecx
jnz @B ;loop

cmp sourcelen, 0
jnz @@base64loop ;main loop

mov eax, edx ;add padding and null terminate
stosd

ret
Base64Encode endp


;**********************************************************
;函数功能:进行Base64解码
;参数:
; source = 传入的编码
; destination = 返回的字符串
;**********************************************************
Base64Decode proc uses ebx edi esi source:DWORD, destination:DWORD
LOCAL sourcelen:DWORD

invoke lstrlen, source
mov sourcelen, eax

mov esi, source ;esi <- source
mov edi, destination ;edi <- destination
mov ecx, sourcelen
shr ecx, 2
cld

;-------------[decoding part]---------------

@@outer_loop:
push ecx
mov ecx, 4
xor ebx, ebx
lodsd
@@inner_loop:
push eax
and eax, 0ffh
mov al, byte ptr [offset base64table + eax]
cmp al, 255
je @@invalid_char
shl ebx, 6
or bl, al
pop eax
shr eax, 8
dec ecx
jnz @@inner_loop
mov eax, ebx
shl eax, 8
xchg ah, al
ror eax, 16
xchg ah, al
stosd
dec edi
pop ecx
dec ecx
jnz @@outer_loop
xor eax, eax
jmp @@decode_done

;-------------------------------------------

@@invalid_char:
mov eax, -1
@@decode_done:
ret
Base64Decode ENDP


end DllEntry
;******************** over ********************
;by LC


--------------------------------------------------------------------------------

yezhan 2005-9-29 13:00

ASP的  

base64解密

<%

sBASE_64_CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
sBASE_64_CHARACTERS = strUnicode2Ansi(sBASE_64_CHARACTERS)

Function strUnicodeLen(asContents)
&#39;计算unicode字符串的Ansi编码的长度
asContents1="a"&asContents
len1=len(asContents1)
k=0
for i=1 to len1
asc1=asc(mid(asContents1,i,1))
if asc1<0 then asc1=65536+asc1
if asc1>255 then
k=k+2
else
k=k+1
end if
next
strUnicodeLen=k-1
End Function

Function strUnicode2Ansi(asContents)
&#39;将Unicode编码的字符串,转换成Ansi编码的字符串
strUnicode2Ansi=""
len1=len(asContents)
for i=1 to len1
varchar=mid(asContents,i,1)
varasc=asc(varchar)
if varasc<0 then varasc=varasc+65536
if varasc>255 then
varHex=Hex(varasc)
varlow=left(varHex,2)
varhigh=right(varHex,2)
strUnicode2Ansi=strUnicode2Ansi & chrb("&H" & varlow ) & chrb("&H" & varhigh )
else
strUnicode2Ansi=strUnicode2Ansi & chrb(varasc)
end if
next
End function

Function strAnsi2Unicode(asContents)
&#39;将Ansi编码的字符串,转换成Unicode编码的字符串
strAnsi2Unicode = ""
len1=lenb(asContents)
if len1=0 then exit function
for i=1 to len1
varchar=midb(asContents,i,1)
varasc=ascb(varchar)
if varasc > 127 then
strAnsi2Unicode = strAnsi2Unicode & chr(ascw(midb(asContents,i+1,1) & varchar))
i=i+1
else
strAnsi2Unicode = strAnsi2Unicode & chr(varasc)
end if
next
End function

Function Base64encode(asContents)
&#39;将Ansi编码的字符串进行Base64编码
&#39;asContents应当是ANSI编码的字符串(二进制的字符串也可以)
Dim lnPosition
Dim lsResult
Dim Char1
Dim Char2
Dim Char3
Dim Char4
Dim Byte1
Dim Byte2
Dim Byte3
Dim SaveBits1
Dim SaveBits2
Dim lsGroupBinary
Dim lsGroup64
Dim m4,len1,len2

len1=Lenb(asContents)
if len1<1 then
Base64encode=""
exit Function
end if

m3=Len1 Mod 3
If M3 > 0 Then asContents = asContents & String(3-M3, chrb(0))
&#39;补足位数是为了便于计算

IF m3 > 0 THEN
len1=len1+(3-m3)
len2=len1-3
else
len2=len1
end if

lsResult = ""

For lnPosition = 1 To len2 Step 3
lsGroup64 = ""
lsGroupBinary = Midb(asContents, lnPosition, 3)

Byte1 = Ascb(Midb(lsGroupBinary, 1, 1)): SaveBits1 = Byte1 And 3
Byte2 = Ascb(Midb(lsGroupBinary, 2, 1)): SaveBits2 = Byte2 And 15
Byte3 = Ascb(Midb(lsGroupBinary, 3, 1))

Char1 = Midb(sBASE_64_CHARACTERS, ((Byte1 And 252) \ 4) + 1, 1)
Char2 = Midb(sBASE_64_CHARACTERS, (((Byte2 And 240) \ 16) Or (SaveBits1 * 16) And &HFF) + 1, 1)
Char3 = Midb(sBASE_64_CHARACTERS, (((Byte3 And 192) \ 64) Or (SaveBits2 * 4) And &HFF) + 1, 1)
Char4 = Midb(sBASE_64_CHARACTERS, (Byte3 And 63) + 1, 1)
lsGroup64 = Char1 & Char2 & Char3 & Char4

lsResult = lsResult & lsGroup64
Next

&#39;处理最后剩余的几个字符
if M3 > 0 then
lsGroup64 = ""
lsGroupBinary = Midb(asContents, len2+1, 3)

Byte1 = Ascb(Midb(lsGroupBinary, 1, 1)): SaveBits1 = Byte1 And 3
Byte2 = Ascb(Midb(lsGroupBinary, 2, 1)): SaveBits2 = Byte2 And 15
Byte3 = Ascb(Midb(lsGroupBinary, 3, 1))

Char1 = Midb(sBASE_64_CHARACTERS, ((Byte1 And 252) \ 4) + 1, 1)
Char2 = Midb(sBASE_64_CHARACTERS, (((Byte2 And 240) \ 16) Or (SaveBits1 * 16) And &HFF) + 1, 1)
Char3 = Midb(sBASE_64_CHARACTERS, (((Byte3 And 192) \ 64) Or (SaveBits2 * 4) And &HFF) + 1, 1)

if M3=1 then
lsGroup64 = Char1 & Char2 & ChrB(61) & ChrB(61) &#39;用=号补足位数
else
lsGroup64 = Char1 & Char2 & Char3 & ChrB(61) &#39;用=号补足位数
end if

lsResult = lsResult & lsGroup64
end if

Base64encode = lsResult

End Function


Function Base64decode(asContents)
&#39;将Base64编码字符串转换成Ansi编码的字符串
&#39;asContents应当也是ANSI编码的字符串(二进制的字符串也可以)
Dim lsResult
Dim lnPosition
Dim lsGroup64, lsGroupBinary
Dim Char1, Char2, Char3, Char4
Dim Byte1, Byte2, Byte3
Dim M4,len1,len2

len1= Lenb(asContents)
M4 = len1 Mod 4

if len1 < 1 or M4 > 0 then
&#39;字符串长度应当是4的倍数
Base64decode = ""
exit Function
end if

&#39;判断最后一位是不是 = 号
&#39;判断倒数第二位是不是 = 号
&#39;这里m4表示最后剩余的需要单独处理的字符个数
if midb(asContents, len1, 1) = chrb(61) then m4=3
if midb(asContents, len1-1, 1) = chrb(61) then m4=2

if m4 = 0 then
len2=len1
else
len2=len1-4
end if

For lnPosition = 1 To Len2 Step 4
lsGroupBinary = ""
lsGroup64 = Midb(asContents, lnPosition, 4)
Char1 = InStrb(sBASE_64_CHARACTERS, Midb(lsGroup64, 1, 1)) - 1
Char2 = InStrb(sBASE_64_CHARACTERS, Midb(lsGroup64, 2, 1)) - 1
Char3 = InStrb(sBASE_64_CHARACTERS, Midb(lsGroup64, 3, 1)) - 1
Char4 = InStrb(sBASE_64_CHARACTERS, Midb(lsGroup64, 4, 1)) - 1
Byte1 = Chrb(((Char2 And 48) \ 16) Or (Char1 * 4) And &HFF)
Byte2 = lsGroupBinary & Chrb(((Char3 And 60) \ 4) Or (Char2 * 16) And &HFF)
Byte3 = Chrb((((Char3 And 3) * 64) And &HFF) Or (Char4 And 63))
lsGroupBinary = Byte1 & Byte2 & Byte3

lsResult = lsResult & lsGroupBinary
Next

&#39;处理最后剩余的几个字符
if M4 > 0 then
lsGroupBinary = ""
lsGroup64 = Midb(asContents, len2+1, m4) & chrB(65) &#39;chr(65)=A,转换成值为0
if M4=2 then &#39;补足4位,是为了便于计算
lsGroup64 = lsGroup64 & chrB(65)
end if
Char1 = InStrb(sBASE_64_CHARACTERS, Midb(lsGroup64, 1, 1)) - 1
Char2 = InStrb(sBASE_64_CHARACTERS, Midb(lsGroup64, 2, 1)) - 1
Char3 = InStrb(sBASE_64_CHARACTERS, Midb(lsGroup64, 3, 1)) - 1
Char4 = InStrb(sBASE_64_CHARACTERS, Midb(lsGroup64, 4, 1)) - 1
Byte1 = Chrb(((Char2 And 48) \ 16) Or (Char1 * 4) And &HFF)
Byte2 = lsGroupBinary & Chrb(((Char3 And 60) \ 4) Or (Char2 * 16) And &HFF)
Byte3 = Chrb((((Char3 And 3) * 64) And &HFF) Or (Char4 And 63))

if M4=2 then
lsGroupBinary = Byte1
elseif M4=3 then
lsGroupBinary = Byte1 & Byte2
end if

lsResult = lsResult & lsGroupBinary
end if

Base64decode = lsResult

End Function

sdecode="aHR0cDovL3d3dy5sYW1raW5nLmNvbS90ZXN0Lzg4c2FkZmc3ODg3OS5hc3A="


response.write replace(strAnsi2Unicode(Base64decode(strUnicode2Ansi(sdecode))),chr(13)&chr(10),"<br>") & "<hr>"

response.end


%>

chinaren 2005-9-29 14:33

看的头都晕了,能解密吗....................................................,复制一大堆代码能解决实际问题吗

史翔 2005-9-29 22:58

倒了,你自己弄个IIS,把ASP代码挂上,不就可以了

tsgxyy 2005-9-30 03:55

郁闷MD532转MDB516转换,就是取掉32的前8位,取掉后8位,就是32位到16的转换,单方面的转换.

史翔 2005-9-30 22:31

<INPUT class=fmbtn id=test value=史翔>
<INPUT class=fmbtn type=button value=加密 onclick="sx.value=calcMD5(test.value)">
<INPUT class=fmbtn id=sx value="这里显示md5的密码">
<script>
/* to convert strings to a list of ascii values */
var sAscii = " !\"#$%&&#39;()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ"
var sAscii = sAscii + "[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";

/* convert integer to hex string */
var sHex = "0123456789ABCDEF";
function hex(i)
{
  h = "";
  for(j = 0; j <= 3; j++)
  {
   h += sHex.charAt((i >> (j * 8 + 4)) & 0x0F) +
      sHex.charAt((i >> (j * 8)) & 0x0F);
  }
  return h;
}

/* add, handling overflows correctly */
function add(x, y)
{
  return ((x&0x7FFFFFFF) + (y&0x7FFFFFFF)) ^ (x&0x80000000) ^ (y&0x80000000);
}

/* MD5 rounds functions */
function R1(A, B, C, D, X, S, T)
{
  q = add(add(A, (B & C) | (~B & D)), add(X, T));
  return add((q << S) | ((q >> (32 - S)) & (Math.pow(2, S) - 1)), B);
}

function R2(A, B, C, D, X, S, T)
{
  q = add(add(A, (B & D) | (C & ~D)), add(X, T));
  return add((q << S) | ((q >> (32 - S)) & (Math.pow(2, S) - 1)), B);
}

function R3(A, B, C, D, X, S, T)
{
  q = add(add(A, B ^ C ^ D), add(X, T));
  return add((q << S) | ((q >> (32 - S)) & (Math.pow(2, S) - 1)), B);
}

function R4(A, B, C, D, X, S, T)
{
  q = add(add(A, C ^ (B | ~D)), add(X, T));
  return add((q << S) | ((q >> (32 - S)) & (Math.pow(2, S) - 1)), B);
}

/* main entry point */
function calcMD5(sInp) {

  /* Calculate length in machine words, including padding */
  wLen = (((sInp.length + 8) >> 6) + 1) << 4;
  var X = new Array(wLen);

  /* Convert string to array of words */
  j = 4;
  for (i = 0; (i * 4) < sInp.length; i++)
  {
   X[i] = 0;
   for (j = 0; (j < 4) && ((j + i * 4) < sInp.length); j++)
   {
    X[i] += (sAscii.indexOf(sInp.charAt((i * 4) + j)) + 32) << (j * 8);
   }
  }

  /* Append padding bits and length */
  if (j == 4)
  {
   X[i++] = 0x80;
  }
  else
  {
   X[i - 1] += 0x80 << (j * 8);
  }
  for(; i < wLen; i++) { X[i] = 0; }
  X[wLen - 2] = sInp.length * 8;

  /* hard-coded initial values */
  a = 0x67452301;
  b = 0xefcdab89;
  c = 0x98badcfe;
  d = 0x10325476;

  /* Process each 16-word block in turn */
  for (i = 0; i < wLen; i += 16) {
   aO = a;
   bO = b;
   cO = c;
   dO = d;

   a = R1(a, b, c, d, X[i+ 0], 7 , 0xd76aa478);
   d = R1(d, a, b, c, X[i+ 1], 12, 0xe8c7b756);
   c = R1(c, d, a, b, X[i+ 2], 17, 0x242070db);
   b = R1(b, c, d, a, X[i+ 3], 22, 0xc1bdceee);
   a = R1(a, b, c, d, X[i+ 4], 7 , 0xf57c0faf);
   d = R1(d, a, b, c, X[i+ 5], 12, 0x4787c62a);
   c = R1(c, d, a, b, X[i+ 6], 17, 0xa8304613);
   b = R1(b, c, d, a, X[i+ 7], 22, 0xfd469501);
   a = R1(a, b, c, d, X[i+ 8], 7 , 0x698098d8);
   d = R1(d, a, b, c, X[i+ 9], 12, 0x8b44f7af);
   c = R1(c, d, a, b, X[i+10], 17, 0xffff5bb1);
   b = R1(b, c, d, a, X[i+11], 22, 0x895cd7be);
   a = R1(a, b, c, d, X[i+12], 7 , 0x6b901122);
   d = R1(d, a, b, c, X[i+13], 12, 0xfd987193);
   c = R1(c, d, a, b, X[i+14], 17, 0xa679438e);
   b = R1(b, c, d, a, X[i+15], 22, 0x49b40821);

   a = R2(a, b, c, d, X[i+ 1], 5 , 0xf61e2562);
   d = R2(d, a, b, c, X[i+ 6], 9 , 0xc040b340);
   c = R2(c, d, a, b, X[i+11], 14, 0x265e5a51);
   b = R2(b, c, d, a, X[i+ 0], 20, 0xe9b6c7aa);
   a = R2(a, b, c, d, X[i+ 5], 5 , 0xd62f105d);
   d = R2(d, a, b, c, X[i+10], 9 ,  0x2441453);
   c = R2(c, d, a, b, X[i+15], 14, 0xd8a1e681);
   b = R2(b, c, d, a, X[i+ 4], 20, 0xe7d3fbc8);
   a = R2(a, b, c, d, X[i+ 9], 5 , 0x21e1cde6);
   d = R2(d, a, b, c, X[i+14], 9 , 0xc33707d6);
   c = R2(c, d, a, b, X[i+ 3], 14, 0xf4d50d87);
   b = R2(b, c, d, a, X[i+ 8], 20, 0x455a14ed);
   a = R2(a, b, c, d, X[i+13], 5 , 0xa9e3e905);
   d = R2(d, a, b, c, X[i+ 2], 9 , 0xfcefa3f8);
   c = R2(c, d, a, b, X[i+ 7], 14, 0x676f02d9);
   b = R2(b, c, d, a, X[i+12], 20, 0x8d2a4c8a);

   a = R3(a, b, c, d, X[i+ 5], 4 , 0xfffa3942);
   d = R3(d, a, b, c, X[i+ 8], 11, 0x8771f681);
   c = R3(c, d, a, b, X[i+11], 16, 0x6d9d6122);
   b = R3(b, c, d, a, X[i+14], 23, 0xfde5380c);
   a = R3(a, b, c, d, X[i+ 1], 4 , 0xa4beea44);
   d = R3(d, a, b, c, X[i+ 4], 11, 0x4bdecfa9);
   c = R3(c, d, a, b, X[i+ 7], 16, 0xf6bb4b60);
   b = R3(b, c, d, a, X[i+10], 23, 0xbebfbc70);
   a = R3(a, b, c, d, X[i+13], 4 , 0x289b7ec6);
   d = R3(d, a, b, c, X[i+ 0], 11, 0xeaa127fa);
   c = R3(c, d, a, b, X[i+ 3], 16, 0xd4ef3085);
   b = R3(b, c, d, a, X[i+ 6], 23,  0x4881d05);
   a = R3(a, b, c, d, X[i+ 9], 4 , 0xd9d4d039);
   d = R3(d, a, b, c, X[i+12], 11, 0xe6db99e5);
   c = R3(c, d, a, b, X[i+15], 16, 0x1fa27cf8);
   b = R3(b, c, d, a, X[i+ 2], 23, 0xc4ac5665);

   a = R4(a, b, c, d, X[i+ 0], 6 , 0xf4292244);
   d = R4(d, a, b, c, X[i+ 7], 10, 0x432aff97);
   c = R4(c, d, a, b, X[i+14], 15, 0xab9423a7);
   b = R4(b, c, d, a, X[i+ 5], 21, 0xfc93a039);
   a = R4(a, b, c, d, X[i+12], 6 , 0x655b59c3);
   d = R4(d, a, b, c, X[i+ 3], 10, 0x8f0ccc92);
   c = R4(c, d, a, b, X[i+10], 15, 0xffeff47d);
   b = R4(b, c, d, a, X[i+ 1], 21, 0x85845dd1);
   a = R4(a, b, c, d, X[i+ 8], 6 , 0x6fa87e4f);
   d = R4(d, a, b, c, X[i+15], 10, 0xfe2ce6e0);
   c = R4(c, d, a, b, X[i+ 6], 15, 0xa3014314);
   b = R4(b, c, d, a, X[i+13], 21, 0x4e0811a1);
   a = R4(a, b, c, d, X[i+ 4], 6 , 0xf7537e82);
   d = R4(d, a, b, c, X[i+11], 10, 0xbd3af235);
   c = R4(c, d, a, b, X[i+ 2], 15, 0x2ad7d2bb);
   b = R4(b, c, d, a, X[i+ 9], 21, 0xeb86d391);

   a = add(a, aO);
   b = add(b, bO);
   c = add(c, cO);
   d = add(d, dO);
  }
  return hex(b) + hex(c);
}
</script>

史翔 2005-9-30 22:33

<INPUT class=fmbtn id=test value=史翔>
<INPUT class=fmbtn type=button value=加密 onclick="sx.value=hex_md5(test.value)">
<INPUT class=fmbtn id=sx value="这里显示md5的密码">
<script>
var hexcase = 0;  /* hex output format. 0 - lowercase; 1 - uppercase   

   */
var b64pad  = ""; /* base-64 pad character. "=" for strict RFC

compliance  */
var chrsz  = 8;  /* bits per input character. 8 - ASCII; 16 - Unicode  

   */

/*
* These are the functions you&#39;ll usually want to call
* They take string arguments and return either hex or base-64 encoded

strings
*/
function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length *

chrsz));}
function b64_md5(s){ return binl2b64(core_md5(str2binl(s), s.length *

chrsz));}
function hex_hmac_md5(key, data) { return binl2hex(core_hmac_md5(key,

data)); }
function b64_hmac_md5(key, data) { return binl2b64(core_hmac_md5(key,

data)); }

/* Backwards compatibility - same as hex_md5() */
function calcMD5(s){ return binl2hex(core_md5(str2binl(s), s.length *

chrsz));}

/*
* Perform a simple self-test to see if the VM is working
*/
function md5_vm_test()
{
  return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72";
}

/*
* Calculate the MD5 of an array of little-endian words, and a bit

length
*/
function core_md5(x, len)
{
  /* append padding */
  x[len >> 5] |= 0x80 << ((len) % 32);
  x[(((len + 64) >>> 9) << 4) + 14] = len;
  
  var a =  1732584193;
  var b = -271733879;
  var c = -1732584194;
  var d =  271733878;

  for(var i = 0; i < x.length; i += 16)
  {
   var olda = a;
   var oldb = b;
   var oldc = c;
   var oldd = d;

   a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
   d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
   c = md5_ff(c, d, a, b, x[i+ 2], 17,  606105819);
   b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
   a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
   d = md5_ff(d, a, b, c, x[i+ 5], 12,  1200080426);
   c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
   b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
   a = md5_ff(a, b, c, d, x[i+ 8], 7 ,  1770035416);
   d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
   c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
   b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
   a = md5_ff(a, b, c, d, x[i+12], 7 ,  1804603682);
   d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
   c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
   b = md5_ff(b, c, d, a, x[i+15], 22,  1236535329);

   a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
   d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
   c = md5_gg(c, d, a, b, x[i+11], 14,  643717713);
   b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
   a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
   d = md5_gg(d, a, b, c, x[i+10], 9 ,  38016083);
   c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
   b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
   a = md5_gg(a, b, c, d, x[i+ 9], 5 ,  568446438);
   d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
   c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
   b = md5_gg(b, c, d, a, x[i+ 8], 20,  1163531501);
   a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
   d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
   c = md5_gg(c, d, a, b, x[i+ 7], 14,  1735328473);
   b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);

   a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
   d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
   c = md5_hh(c, d, a, b, x[i+11], 16,  1839030562);
   b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
   a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
   d = md5_hh(d, a, b, c, x[i+ 4], 11,  1272893353);
   c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
   b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
   a = md5_hh(a, b, c, d, x[i+13], 4 ,  681279174);
   d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
   c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
   b = md5_hh(b, c, d, a, x[i+ 6], 23,  76029189);
   a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
   d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
   c = md5_hh(c, d, a, b, x[i+15], 16,  530742520);
   b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);

   a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
   d = md5_ii(d, a, b, c, x[i+ 7], 10,  1126891415);
   c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
   b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
   a = md5_ii(a, b, c, d, x[i+12], 6 ,  1700485571);
   d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
   c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
   b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
   a = md5_ii(a, b, c, d, x[i+ 8], 6 ,  1873313359);
   d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
   c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
   b = md5_ii(b, c, d, a, x[i+13], 21,  1309151649);
   a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
   d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
   c = md5_ii(c, d, a, b, x[i+ 2], 15,  718787259);
   b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);

   a = safe_add(a, olda);
   b = safe_add(b, oldb);
   c = safe_add(c, oldc);
   d = safe_add(d, oldd);
  }
  return Array(a, b, c, d);
  
}

/*
* These functions implement the four basic operations the algorithm

uses.
*/
function md5_cmn(q, a, b, x, s, t)
{
  return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)),

s),b);
}
function md5_ff(a, b, c, d, x, s, t)
{
  return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
}
function md5_gg(a, b, c, d, x, s, t)
{
  return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
}
function md5_hh(a, b, c, d, x, s, t)
{
  return md5_cmn(b ^ c ^ d, a, b, x, s, t);
}
function md5_ii(a, b, c, d, x, s, t)
{
  return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
}

/*
* Calculate the HMAC-MD5, of a key and some data
*/
function core_hmac_md5(key, data)
{
  var bkey = str2binl(key);
  if(bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);

  var ipad = Array(16), opad = Array(16);
  for(var i = 0; i < 16; i++)
  {
   ipad[i] = bkey[i] ^ 0x36363636;
   opad[i] = bkey[i] ^ 0x5C5C5C5C;
  }

  var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length *

chrsz);
  return core_md5(opad.concat(hash), 512 + 128);
}

/*
* Add integers, wrapping at 2^32. This uses 16-bit operations

internally
* to work around bugs in some JS interpreters.
*/
function safe_add(x, y)
{
  var lsw = (x & 0xFFFF) + (y & 0xFFFF);
  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  return (msw << 16) | (lsw & 0xFFFF);
}

/*
* Bitwise rotate a 32-bit number to the left.
*/
function bit_rol(num, cnt)
{
  return (num << cnt) | (num >>> (32 - cnt));
}

/*
* Convert a string to an array of little-endian words
* If chrsz is ASCII, characters >255 have their hi-byte silently

ignored.
*/
function str2binl(str)
{
  var bin = Array();
  var mask = (1 << chrsz) - 1;
  for(var i = 0; i < str.length * chrsz; i += chrsz)
   bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);
  return bin;
}

/*
* Convert an array of little-endian words to a hex string.
*/
function binl2hex(binarray)
{
  var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
  var str = "";
  for(var i = 0; i < binarray.length * 4; i++)
  {
   str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
        hex_tab.charAt((binarray[i>>2] >> ((i%4)*8  )) & 0xF);
  }
  return str;
}

/*
* Convert an array of little-endian words to a base-64 string
*/
function binl2b64(binarray)
{
  var tab =

"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  var str = "";
  for(var i = 0; i < binarray.length * 4; i += 3)
  {
   var triplet = (((binarray[i  >> 2] >> 8 * ( i  %4)) & 0xFF) <<

16)
           | (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8

)
           |  ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF);
   for(var j = 0; j < 4; j++)
   {
    if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
    else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
   }
  }
  return str;
}
</script>
前面是md6 16位ㄉ,后面是md5 32 位
关键是那return hex(b) + hex(c);

透明木头 2005-10-6 20:31

应该不难写的,MD5的VBS代码几乎每个ASP程序里面都有!
用VB来写我觉得应该很简单的!
这是Neeao的MD5的截图。

[img]http://www.lucidwood.com/uploads/img43451a30e92d4.jpg[/img]

zhpall 2005-10-10 03:01

32位去前8后8就是16位,肯定是。
那前8位和后8位是怎么来的呢?

magicbear 2005-10-10 22:27

md5算法几乎全语言的都有,其文沒必要再写一个,因为几乎每个人手上都会有....
php,java等甚致內置了md5
js,vbs,asp,vb,delphi等也有算法
汇编也有,始终都出了很多年..

wedxzaw 2005-10-13 15:27

在我的笔记本电脑上的破解成绩(512M内存,p4 2.2G):
98fffa5e1b3bd16c -> 74556788
破出用了61087毫秒...
d27df17b98fffa5e1b3bd16c2e2c68ae -> 74556788
破出用了61088毫秒...

选择最小位1,最大位8位,纯数字破解。

金州 2005-11-9 15:47

[url]http://www.md5lookup.com/?category=01-3&search=on[/url]
这个地方关于md5还是不错的,

风泽 2005-11-25 17:38

EST-EvilHsu有base64解密功能。
下载地址:[url]http://www.eviloctal.com/forum/read.php?tid=16135&fpage=1[/url]

luhao1212 2006-6-27 16:27

今天遇到一个30位和27位的MD5码,怎样破解呢

evilcwa 2006-6-27 18:41

[quote][b]这里是引用第[/b][color=#ff0000][15 楼][/color][b]的[color=#000066]风泽[/color]于[/b]2005-09-28 21:10[b]发表的:[/b]


邮箱密码是用base64加密后提交的啊~[/quote]

很多黑客小游戏都有这个的.....呵呵 ....  华夏的那个黑客游戏就有一个有关于此的......

evilcwa 2006-6-27 18:44

[quote][b]这里是引用第[/b][color=#ff0000][31 楼][/color][b]的[color=#000066]luhao1212[/color]于[/b]2006-06-27 16:27[b]发表的:[/b]
今天遇到一个30位和27位的MD5码,怎样破解呢[/quote]

这位大哥,,,,你还是先去EST新手版块充电吧......偶活了这么久还没见过30位和27位的MD5码......难道是偶要去充电了??????????

页: [1]
© 1999-2008 EvilOctal Security Team