打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
纯代码实现md5算法
userphoto

2007.04.05

关注

 网上已经有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 LongAs 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 IntegerByVal lngVal2 As IntegerAs 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 IntegerByVal lngVal2 As IntegerByVal lngVal3 As IntegerByVal lngVal4 As IntegerAs 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 IntegerByVal Shift As IntegerAs 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 IntegerByVal Shift As IntegerAs Integer
        
Return (Value << Shift) Or ((Value >> (32 - Shift)) And ((2 << Shift) - 1))
    End Function


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


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


    
Private Function H(ByVal x As IntegerByVal y As IntegerByVal z As IntegerAs Integer
        
Return x Xor y Xor z
    
End Function


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


    
Private Function FF(ByVal a As IntegerByVal b As IntegerByVal c As IntegerByVal d As IntegerByVal Mj As IntegerByVal s As IntegerByVal Ti As IntegerAs 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 IntegerByVal b As IntegerByVal c As IntegerByVal d As IntegerByVal Mj As IntegerByVal s As IntegerByVal Ti As IntegerAs 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 IntegerByVal b As IntegerByVal c As IntegerByVal d As IntegerByVal Mj As IntegerByVal s As IntegerByVal Ti As IntegerAs 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 IntegerByVal b As IntegerByVal c As IntegerByVal d As IntegerByVal Mj As IntegerByVal s As IntegerByVal Ti As IntegerAs 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 StringAs 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


[收藏到我的网摘]   木头发表于 2007年01月08日 19:13:00



特别推荐:

#  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位整数数组<>< div=""><>

#  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
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
VB获取网卡MAC地址代码
VB实用代码,收藏!!
vb 搜索文件
VB指针教程 (1, 2, 3)
P2P的简单示例:VB.net版
【转载】VB6获取本机IP的API,可以获取局域网IP和互联网IP【恢复】 中国电子开发网...
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服