网上已经有C,C++,VB6,java的MD5算法源代码了,甚至已经有了C#的MD5算法代码,唯独VB.NET的MD5算法代码是在是少而又少,因此贴出下列代码供大家雅正。
有人说了,.NET自带MD5算法,何必多此一举呢?如下所示:
‘MD5 Public Shared Function MD5(ByVal strKey As String) As String Dim sPwd As String Dim bytPwd As [Byte]() = ConStrArr(strKey) Dim hashPwd As Byte() = CType(System.Security.Cryptography.CryptoConfig.CreateFromName("MD5"), _ System.Security.Cryptography.HashAlgorithm).ComputeHash(bytPwd) sPwd = BitConverter.ToString(hashPwd) sPwd = LCase(sPwd.Replace("-", "")) ‘去掉中间的"-"符号并转换为小写字母 Return sPwd End Function
Public Shared Function MD5(ByVal Key As Byte()) As Byte() Return CType(System.Security.Cryptography.CryptoConfig.CreateFromName("MD5"), _ System.Security.Cryptography.HashAlgorithm).ComputeHash(Key) End Function
当初写这代码是为了将用了.NET的MD5验证的程序能够用于没有MD5算法的Windows 2000 SP4以下版本,另外也可以更好的了解MD5算法的原理和步骤。
代码如下:
Public Class MD5
Private Const AA As Integer = &H67452301
Private Const BB As Integer = &HEFCDAB89
Private Const CC As Integer = &H98BADCFE
Private Const DD As Integer = &H10325476

Private Const Ts As Long = &H100000000

Private Const S11 As Integer = 7
Private Const S12 As Integer = 12
Private Const S13 As Integer = 17
Private Const S14 As Integer = 22
Private Const S21 As Integer = 5
Private Const S22 As Integer = 9
Private Const S23 As Integer = 14
Private Const S24 As Integer = 20
Private Const S31 As Integer = 4
Private Const S32 As Integer = 11
Private Const S33 As Integer = 16
Private Const S34 As Integer = 23
Private Const S41 As Integer = 6
Private Const S42 As Integer = 10
Private Const S43 As Integer = 15
Private Const S44 As Integer = 21

Private Si As Integer() = New Integer() {}

字节函数

Private Function InitByte(ByRef Data As Byte()) As Byte()
Dim kl As ArrayList = New ArrayList(Data)
Dim dbLength As Int64 = Data.GetLongLength(0)
If dbLength Mod 56 <> 0 OrElse dbLength = 0 Then
Dim i As Integer = 56 - (kl.Count Mod 56) - 1
kl.Add(CByte(&H80)) ‘补1
If i > 0 Then
kl.AddRange(New Byte(i - 1) {}) ‘补0
End If
End If
kl.AddRange(Int64ToBytes(dbLength << 3)) ‘添加长度
Dim buffout As Byte() = kl.ToArray(GetType(Byte))
kl.Clear()
Return buffout
End Function

Private Function InitT() As Int32()
Dim T As Int32() = New Int32(63) {}
For i As Integer = 0 To 63
T(i) = BytesToInt32(Int64ToBytes(CLng(Ts * Math.Abs(Math.Sin(i + 1))) And &HFFFFFFFF&))
Next
Return T
End Function

Private Function InitM(ByRef Data As Byte(), ByVal StartIndex As Long) As Int32()
Dim M As Int32() = New Int32(15) {}
For i As Integer = 0 To 15
M(i) = BytesToInt32(Data, i << 2)
Next
Return M
End Function

Private Function LongAdd(ByVal lngVal1 As Integer, ByVal lngVal2 As Integer) As Integer

Dim lngHighWord As Integer
Dim lngLowWord As Integer
Dim lngOverflow As Integer

lngLowWord = (lngVal1 And &HFFFF&) + (lngVal2 And &HFFFF&)
lngOverflow = lngLowWord 65536
lngHighWord = (((lngVal1 And &HFFFF0000) 65536) + ((lngVal2 And &HFFFF0000) 65536) + lngOverflow) And &HFFFF&

Return lngHighWord << 16 Or (lngLowWord And &HFFFF) ‘LongConversion((lngHighWord * 65536.0#) + (lngLowWord And &HFFFF&))
End Function

Private Function LongAdd4(ByVal lngVal1 As Integer, ByVal lngVal2 As Integer, ByVal lngVal3 As Integer, ByVal lngVal4 As Integer) As Integer

Dim lngHighWord As Integer
Dim lngLowWord As Integer
Dim lngOverflow As Integer

lngLowWord = (lngVal1 And &HFFFF&) + (lngVal2 And &HFFFF&) + (lngVal3 And &HFFFF&) + (lngVal4 And &HFFFF&)
lngOverflow = lngLowWord 65536
lngHighWord = (((lngVal1 And &HFFFF0000) 65536) + ((lngVal2 And &HFFFF0000) 65536) + ((lngVal3 And &HFFFF0000) 65536) + ((lngVal4 And &HFFFF0000) 65536) + lngOverflow) And &HFFFF&
Return lngHighWord << 16 Or (lngLowWord And &HFFFF) ‘LongConversion((lngHighWord * 65536.0#) + (lngLowWord And &HFFFF&))
End Function

‘‘‘ -----------------------------------------------------------------------------
‘‘‘ <summary>
‘‘‘ 循环左移位指令
‘‘‘ </summary>
‘‘‘ <param name="Value"></param>
‘‘‘ <param name="Shift"></param>
‘‘‘ <returns></returns>
‘‘‘ <remarks>
‘‘‘ </remarks>
‘‘‘ <history>
‘‘‘ [malingxian] 2007-1-8 Created
‘‘‘ </history>
‘‘‘ -----------------------------------------------------------------------------
Private Function RoundLeftShift(ByVal Value As Integer, ByVal Shift As Integer) As Integer
Return (Value << Shift) Or ((Value >> (32 - Shift)) And ((2 << (Shift - 1)) - 1))
End Function

‘‘‘ -----------------------------------------------------------------------------
‘‘‘ <summary>
‘‘‘ 循环右移位指令
‘‘‘ </summary>
‘‘‘ <param name="Value"></param>
‘‘‘ <param name="Shift"></param>
‘‘‘ <returns></returns>
‘‘‘ <remarks>
‘‘‘ </remarks>
‘‘‘ <history>
‘‘‘ [malingxian] 2007-1-8 Created
‘‘‘ </history>
‘‘‘ -----------------------------------------------------------------------------
Private Function RoundRightShift(ByVal Value As Integer, ByVal Shift As Integer) As Integer
‘Return (Value << Shift) Or ((Value >> (32 - Shift)) And ((2 << Shift) - 1))
End Function

Private Function F(ByVal x As Integer, ByVal y As Integer, ByVal z As Integer) As Integer
Return (x And y) Or (Not (x) And z)
End Function

Private Function G(ByVal x As Integer, ByVal y As Integer, ByVal z As Integer) As Integer
Return (x And z) Or (y And Not (z))
End Function

Private Function H(ByVal x As Integer, ByVal y As Integer, ByVal z As Integer) As Integer
Return x Xor y Xor z
End Function

Private Function I(ByVal x As Integer, ByVal y As Integer, ByVal z As Integer) As Integer
Return y Xor (x Or Not (z))
End Function

Private Function FF(ByVal a As Integer, ByVal b As Integer, ByVal c As Integer, ByVal d As Integer, ByVal Mj As Integer, ByVal s As Integer, ByVal Ti As Integer) As Integer
Dim pa As Integer = F(b, c, d)
pa = LongAdd4(a, pa, Mj, Ti)
pa = RoundLeftShift(pa, s) ‘注意:此处不是循环移位,故出错
pa = LongAdd(b, pa)
Return pa
Return LongAdd(b, RoundLeftShift(LongAdd4(a, F(b, c, d), Mj, Ti), s))
End Function

Private Function GG(ByVal a As Integer, ByVal b As Integer, ByVal c As Integer, ByVal d As Integer, ByVal Mj As Integer, ByVal s As Integer, ByVal Ti As Integer) As Integer
‘a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s)
‘Return b + ((a + G(b, c, d) + Mj + Ti) << s)
Return LongAdd(b, RoundLeftShift(LongAdd4(a, G(b, c, d), Mj, Ti), s))
End Function

Private Function HH(ByVal a As Integer, ByVal b As Integer, ByVal c As Integer, ByVal d As Integer, ByVal Mj As Integer, ByVal s As Integer, ByVal Ti As Integer) As Integer
‘Return b + ((a + H(b, c, d) + Mj + Ti) << s)
Return LongAdd(b, RoundLeftShift(LongAdd4(a, H(b, c, d), Mj, Ti), s))
End Function

Private Function II(ByVal a As Integer, ByVal b As Integer, ByVal c As Integer, ByVal d As Integer, ByVal Mj As Integer, ByVal s As Integer, ByVal Ti As Integer) As Integer
‘Return b + ((a + (I(b, c, d) + Mj + Ti) << s))
Return LongAdd(b, RoundLeftShift(LongAdd4(a, I(b, c, d), Mj, Ti), s))
End Function

Public Function MD5Conversion(ByVal Data As Byte()) As Byte()
Dim buff As Byte() = Me.InitByte(Data)
‘Dim T As Integer() = InitT()
Dim A As Integer = AA
Dim B As Integer = BB
Dim C As Integer = CC
Dim D As Integer = DD

For i As Integer = 0 To buff.Length - 63 Step 64
Dim M As Integer() = InitM(buff, i)

A = FF(A, B, C, D, M(&H0), S11, &HD76AA478)
D = FF(D, A, B, C, M(&H1), S12, &HE8C7B756)
C = FF(C, D, A, B, M(&H2), S13, &H242070DB)
B = FF(B, C, D, A, M(&H3), S14, &HC1BDCEEE)
‘Console.WriteLine("{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D))
A = FF(A, B, C, D, M(&H4), S11, &HF57C0FAF)
D = FF(D, A, B, C, M(&H5), S12, &H4787C62A)
C = FF(C, D, A, B, M(&H6), S13, &HA8304613)
B = FF(B, C, D, A, M(&H7), S14, &HFD469501)
‘Console.WriteLine("{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D))
A = FF(A, B, C, D, M(&H8), S11, &H698098D8)
D = FF(D, A, B, C, M(&H9), S12, &H8B44F7AF)
C = FF(C, D, A, B, M(&HA), S13, &HFFFF5BB1)
B = FF(B, C, D, A, M(&HB), S14, &H895CD7BE)
‘Console.WriteLine("{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D))
A = FF(A, B, C, D, M(&HC), S11, &H6B901122)
D = FF(D, A, B, C, M(&HD), S12, &HFD987193)
C = FF(C, D, A, B, M(&HE), S13, &HA679438E)
B = FF(B, C, D, A, M(&HF), S14, &H49B40821)
‘Console.WriteLine("{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D))

A = GG(A, B, C, D, M(&H1), S21, &HF61E2562)
D = GG(D, A, B, C, M(&H6), S22, &HC040B340)
C = GG(C, D, A, B, M(&HB), S23, &H265E5A51)
B = GG(B, C, D, A, M(&H0), S24, &HE9B6C7AA)
‘Console.WriteLine("{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D))
A = GG(A, B, C, D, M(&H5), S21, &HD62F105D)
D = GG(D, A, B, C, M(&HA), S22, &H2441453)
C = GG(C, D, A, B, M(&HF), S23, &HD8A1E681)
B = GG(B, C, D, A, M(&H4), S24, &HE7D3FBC8)
‘Console.WriteLine("{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D))
A = GG(A, B, C, D, M(&H9), S21, &H21E1CDE6)
D = GG(D, A, B, C, M(&HE), S22, &HC33707D6)
C = GG(C, D, A, B, M(&H3), S23, &HF4D50D87)
B = GG(B, C, D, A, M(&H8), S24, &H455A14ED)
‘Console.WriteLine("{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D))
A = GG(A, B, C, D, M(&HD), S21, &HA9E3E905)
D = GG(D, A, B, C, M(&H2), S22, &HFCEFA3F8)
C = GG(C, D, A, B, M(&H7), S23, &H676F02D9)
B = GG(B, C, D, A, M(&HC), S24, &H8D2A4C8A)
‘Console.WriteLine("{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D))

A = HH(A, B, C, D, M(&H5), S31, &HFFFA3942)
D = HH(D, A, B, C, M(&H8), S32, &H8771F681)
C = HH(C, D, A, B, M(&HB), S33, &H6D9D6122)
B = HH(B, C, D, A, M(&HE), S34, &HFDE5380C)
‘Console.WriteLine("{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D))
A = HH(A, B, C, D, M(&H1), S31, &HA4BEEA44)
D = HH(D, A, B, C, M(&H4), S32, &H4BDECFA9)
C = HH(C, D, A, B, M(&H7), S33, &HF6BB4B60)
B = HH(B, C, D, A, M(&HA), S34, &HBEBFBC70)
‘Console.WriteLine("{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D))
A = HH(A, B, C, D, M(&HD), S31, &H289B7EC6)
D = HH(D, A, B, C, M(&H0), S32, &HEAA127FA)
C = HH(C, D, A, B, M(&H3), S33, &HD4EF3085)
B = HH(B, C, D, A, M(&H6), S34, &H4881D05)
‘Console.WriteLine("{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D))
A = HH(A, B, C, D, M(&H9), S31, &HD9D4D039)
D = HH(D, A, B, C, M(&HC), S32, &HE6DB99E5)
C = HH(C, D, A, B, M(&HF), S33, &H1FA27CF8)
B = HH(B, C, D, A, M(&H2), S34, &HC4AC5665)
‘Console.WriteLine("{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D))

A = II(A, B, C, D, M(&H0), S41, &HF4292244)
D = II(D, A, B, C, M(&H7), S42, &H432AFF97)
C = II(C, D, A, B, M(&HE), S43, &HAB9423A7)
B = II(B, C, D, A, M(&H5), S44, &HFC93A039)
‘Console.WriteLine("{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D))
A = II(A, B, C, D, M(&HC), S41, &H655B59C3)
D = II(D, A, B, C, M(&H3), S42, &H8F0CCC92)
C = II(C, D, A, B, M(&HA), S43, &HFFEFF47D)
B = II(B, C, D, A, M(&H1), S44, &H85845DD1)
‘Console.WriteLine("{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D))
A = II(A, B, C, D, M(&H8), S41, &H6FA87E4F)
D = II(D, A, B, C, M(&HF), S42, &HFE2CE6E0)
C = II(C, D, A, B, M(&H6), S43, &HA3014314)
B = II(B, C, D, A, M(&HD), S44, &H4E0811A1)
‘Console.WriteLine("{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D))
A = II(A, B, C, D, M(&H4), S41, &HF7537E82)
D = II(D, A, B, C, M(&HB), S42, &HBD3AF235)
C = II(C, D, A, B, M(&H2), S43, &H2AD7D2BB)
B = II(B, C, D, A, M(&H9), S44, &HEB86D391)
‘Console.WriteLine("{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D))

A = LongAdd(A, AA)
B = LongAdd(B, BB)
C = LongAdd(C, CC)
D = LongAdd(D, DD)
Next

Dim caa As New ArrayList(16)
caa.AddRange(Int32ToBytes(A))
caa.AddRange(Int32ToBytes(B))
caa.AddRange(Int32ToBytes(C))
caa.AddRange(Int32ToBytes(D))
Dim buffout As Byte() = caa.ToArray(GetType(Byte))
caa.Clear()
Return buffout
End Function

Public Function MD5Conversion(ByVal strKey As String) As String
Dim sPwd As String
Dim bytPwd As [Byte]() = System.Text.Encoding.Default.GetBytes(strKey)
Dim hashPwd As Byte() = MD5Conversion(bytPwd)
sPwd = BitConverter.ToString(hashPwd)
sPwd = LCase(sPwd.Replace("-", "")) ‘去掉中间的"-"符号并转换为小写字母
Return sPwd
End Function

End Class

用法:
dim cc as new MD5
dim strOut as string=cc.MD5Conversion(待校验字符串)
dim byteOut as byte()=cc.MD5Conversion(字节数组)
另外可以将该MD5类的MD5Conversion做成静态方法使用。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1477449
特别推荐:
- 每天50元!百万用户等你来!
广告价格高,预算有限,产品推不出去,怎么办? Tag广告-灵活控制成本,直达目标用户!经济、实惠 .net
- 美女走光了 只有程序员
程序员谈论程序员的视频节目 就在CSDN视频频道 .net
- 用友软件急聘.NET开发工程师
用友软件一直秉持“人才为重”的理念 我们盛情邀您加入…… .net
- .Net程序员不得不看的C#经典书籍
22本C#经典著作 部分图书提供连载 CSDN读书频道独家奉献 .net
- 盛大网络诚聘技术人才!
诚聘软件精英,携手与您共创盛大新传奇 .net
# malingxian 发表于2007-03-05 16:56:28 IP: 218.58.145.*
应ROSWELL兄指出本算法在计算超过55位的MD5值时会出错,现已改正: 改正1、InitByte方法的更改: ‘‘‘ ----------------------------------------------------------------------------- ‘‘‘ <summary> ‘‘‘ 初始化数据 ‘‘‘ </summary> ‘‘‘ <param name="Data"></param> ‘‘‘ <returns></returns> ‘‘‘ <remarks>补足数据位数为k*64+56字节 ‘‘‘ </remarks> ‘‘‘ <history> ‘‘‘ [malingxian] 2007-3-3 Created ‘‘‘ </history> ‘‘‘ ----------------------------------------------------------------------------- Private Function InitByte(ByRef Data As Byte()) As Byte() Dim kl As ArrayList = New ArrayList(Data) Dim dbLength As Int64 = Data.GetLongLength(0)
Dim j As Integer = dbLength Mod 64 If j >= 56 Then j = 120 - j Else j = 56 - j If j = 0 Then j = 56 End If
kl.Add(CByte(&H80)) ‘补1 kl.AddRange(New Byte(j - 1 - 1) {}) ‘补0 kl.AddRange(Int64ToBytes(dbLength << 3)) ‘添加长度 Dim buffout As Byte() = kl.ToArray(GetType(Byte)) kl.Clear() Return buffout End Function 改正2、InitM的更改: ‘‘‘ ----------------------------------------------------------------------------- ‘‘‘ <summary> ‘‘‘ 将分组数据按64字节为一组取出来,并转化32位整数数组
# malingxian 发表于2007-03-05 16:57:07 IP: 218.58.145.*
‘‘‘ ----------------------------------------------------------------------------- ‘‘‘ <summary> ‘‘‘ 将分组数据按64字节为一组取出来,并转化32位整数数组 ‘‘‘ </summary> ‘‘‘ <param name="Data"></param> ‘‘‘ <param name="StartIndex"></param> ‘‘‘ <returns></returns> ‘‘‘ <remarks> ‘‘‘ </remarks> ‘‘‘ <history> ‘‘‘ [malingxian] 2007-3-3 Created ‘‘‘ </history> ‘‘‘ ----------------------------------------------------------------------------- Private Function InitM(ByRef Data As Byte(), ByVal StartIndex As Long) As Int32() Dim M As Int32() = New Int32(15) {} For i As Integer = 0 To 15 M(i) = BytesToInt32(Data, StartIndex + (i << 2)) Next Return M End Function
# malingxian 发表于2007-03-05 16:57:49 IP: 218.58.145.*
改正3、主循环方法的更改: Public Function MD5Conversion(ByVal Data As Byte()) As Byte() Dim buff As Byte() = Me.InitByte(Data) ‘Dim T As Integer() = InitT() Dim A As Integer = AA Dim B As Integer = BB Dim C As Integer = CC Dim D As Integer = DD Dim AAA As Integer = AA Dim BBB As Integer = BB Dim CCC As Integer = CC Dim DDD As Integer = DD
‘Console.WriteLine(BitConverter.ToString(buff)) For i As Integer = 0 To buff.Length - 63 Step 64 Dim M As Integer() = InitM(buff, i) A = AAA : B = BBB : C = CCC : D = DDD
A = FF(A, B, C, D, M(&H0), S11, &HD76AA478) D = FF(D, A, B, C, M(&H1), S12, &HE8C7B756) C = FF(C, D, A, B, M(&H2), S13, &H242070DB) B = FF(B, C, D, A, M(&H3), S14, &HC1BDCEEE) ‘Console.WriteLine("{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D)) A = FF(A, B, C, D, M(&H4), S11, &HF57C0FAF) D = FF(D, A, B, C, M(&H5), S12, &H4787C62A) C = FF(C, D, A, B, M(&H6), S13, &HA8304613) B = FF(B, C, D, A, M(&H7), S14, &HFD469501) ‘Console.WriteLine("{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D)) A = FF(A, B, C, D, M(&H8), S11, &H6980
# malingxian 发表于2007-03-05 16:58:38 IP: 218.58.145.*
98D8) D = FF(D, A, B, C, M(&H9), S12, &H8B44F7AF) C = FF(C, D, A, B, M(&HA), S13, &HFFFF5BB1) B = FF(B, C, D, A, M(&HB), S14, &H895CD7BE) ‘Console.WriteLine("{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D)) A = FF(A, B, C, D, M(&HC), S11, &H6B901122) D = FF(D, A, B, C, M(&HD), S12, &HFD987193) C = FF(C, D, A, B, M(&HE), S13, &HA679438E) B = FF(B, C, D, A, M(&HF), S14, &H49B40821) ‘Console.WriteLine("{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D))
A = GG(A, B, C, D, M(&H1), S21, &HF61E2562) D = GG(D, A, B, C, M(&H6), S22, &HC040B340) C = GG(C, D, A, B, M(&HB), S23, &H265E5A51) B = GG(B, C, D, A, M(&H0), S24, &HE9B6C7AA) ‘Console.WriteLine("{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D)) A = GG(A, B, C, D, M(&H5), S21, &HD62F105D) D = GG(D, A, B, C, M(&HA), S22, &H2441453) C = GG(C, D, A, B, M(&HF), S23, &HD8A1E681) B = GG(B, C, D, A, M(&H4), S24, &HE7D3FBC8) ‘Console.WriteLine("{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D)) A = GG(A, B, C, D, M(&H9), S21, &H21E1CDE6) D = GG(D, A, B, C, M
# malingxian 发表于2007-03-05 16:59:06 IP: 218.58.145.*
(&HE), S22, &HC33707D6) C = GG(C, D, A, B, M(&H3), S23, &HF4D50D87) B = GG(B, C, D, A, M(&H8), S24, &H455A14ED) ‘Console.WriteLine("{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D)) A = GG(A, B, C, D, M(&HD), S21, &HA9E3E905) D = GG(D, A, B, C, M(&H2), S22, &HFCEFA3F8) C = GG(C, D, A, B, M(&H7), S23, &H676F02D9) B = GG(B, C, D, A, M(&HC), S24, &H8D2A4C8A) ‘Console.WriteLine("{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D)) Console.WriteLine("aaa:{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D))
A = HH(A, B, C, D, M(&H5), S31, &HFFFA3942) D = HH(D, A, B, C, M(&H8), S32, &H8771F681) C = HH(C, D, A, B, M(&HB), S33, &H6D9D6122) B = HH(B, C, D, A, M(&HE), S34, &HFDE5380C) ‘Console.WriteLine("{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D)) A = HH(A, B, C, D, M(&H1), S31, &HA4BEEA44) D = HH(D, A, B, C, M(&H4), S32, &H4BDECFA9) C = HH(C, D, A, B, M(&H7), S33, &HF6BB4B60) B = HH(B, C, D, A, M(&HA), S34, &HBEBFBC70) ‘Console.WriteLine("{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D)) A = HH(A, B, C, D, M(&HD), S31, &
# malingxian 发表于2007-03-05 16:59:39 IP: 218.58.145.*
H289B7EC6) D = HH(D, A, B, C, M(&H0), S32, &HEAA127FA) C = HH(C, D, A, B, M(&H3), S33, &HD4EF3085) B = HH(B, C, D, A, M(&H6), S34, &H4881D05) ‘Console.WriteLine("{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D)) A = HH(A, B, C, D, M(&H9), S31, &HD9D4D039) D = HH(D, A, B, C, M(&HC), S32, &HE6DB99E5) C = HH(C, D, A, B, M(&HF), S33, &H1FA27CF8) B = HH(B, C, D, A, M(&H2), S34, &HC4AC5665) ‘Console.WriteLine("{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D)) Console.WriteLine("aaa:{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D))
A = II(A, B, C, D, M(&H0), S41, &HF4292244) D = II(D, A, B, C, M(&H7), S42, &H432AFF97) C = II(C, D, A, B, M(&HE), S43, &HAB9423A7) B = II(B, C, D, A, M(&H5), S44, &HFC93A039) ‘Console.WriteLine("{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D)) A = II(A, B, C, D, M(&HC), S41, &H655B59C3) D = II(D, A, B, C, M(&H3), S42, &H8F0CCC92) C = II(C, D, A, B, M(&HA), S43, &HFFEFF47D) B = II(B, C, D, A, M(&H1), S44, &H85845DD1) ‘Console.WriteLine("{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D))
# malingxian 发表于2007-03-05 17:00:05 IP: 218.58.145.*
A = II(A, B, C, D, M(&H8), S41, &H6FA87E4F) D = II(D, A, B, C, M(&HF), S42, &HFE2CE6E0) C = II(C, D, A, B, M(&H6), S43, &HA3014314) B = II(B, C, D, A, M(&HD), S44, &H4E0811A1) ‘Console.WriteLine("{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D)) A = II(A, B, C, D, M(&H4), S41, &HF7537E82) D = II(D, A, B, C, M(&HB), S42, &HBD3AF235) C = II(C, D, A, B, M(&H2), S43, &H2AD7D2BB) B = II(B, C, D, A, M(&H9), S44, &HEB86D391) ‘Console.WriteLine("{0},{1},{2},{3}", Hex(A), Hex(B), Hex(C), Hex(D))
AAA = LongAdd(A, AAA) BBB = LongAdd(B, BBB) CCC = LongAdd(C, CCC) DDD = LongAdd(D, DDD) ‘Console.WriteLine("AAA:{0},{1},{2},{3}", Hex(AAA), Hex(BBB), Hex(CCC), Hex(DDD)) Next
Dim caa As New ArrayList(16) caa.AddRange(Int32ToBytes(AAA)) caa.AddRange(Int32ToBytes(BBB)) caa.AddRange(Int32ToBytes(CCC)) caa.AddRange(Int32ToBytes(DDD)) Dim buffout As Byte() = caa.ToArray(GetType(Byte)) caa.Clear() Return buffout End Function
|