vb格式的如下,有没有强人翻译成C#格式的?
--------------------------
Imports System
imports System.Net
imports System.Net.Sockets
Imports System.Text
imports System.Data
imports System.Web
Imports System.Web.UIPublic Class SHA256 : Inherits PagePrivate m_lOnBits(30)
Private m_l2Power(30)
Private K(63)Private Const BITS_TO_A_BYTE = 8
Private Const BYTES_TO_A_WORD = 4
Private Const BITS_TO_A_WORD = 32 sub new()
m_lOnBits(0) = CLng(1)
m_lOnBits(1) = CLng(3)
m_lOnBits(2) = CLng(7)
m_lOnBits(3) = CLng(15)
m_lOnBits(4) = CLng(31)
m_lOnBits(5) = CLng(63)
m_lOnBits(6) = CLng(127)
m_lOnBits(7) = CLng(255)
m_lOnBits(8) = CLng(511)
m_lOnBits(9) = CLng(1023)
m_lOnBits(10) = CLng(2047)
m_lOnBits(11) = CLng(4095)
m_lOnBits(12) = CLng(8191)
m_lOnBits(13) = CLng(16383)
m_lOnBits(14) = CLng(32767)
m_lOnBits(15) = CLng(65535)
m_lOnBits(16) = CLng(131071)
m_lOnBits(17) = CLng(262143)
m_lOnBits(18) = CLng(524287)
m_lOnBits(19) = CLng(1048575)
m_lOnBits(20) = CLng(2097151)
m_lOnBits(21) = CLng(4194303)
m_lOnBits(22) = CLng(8388607)
m_lOnBits(23) = CLng(16777215)
m_lOnBits(24) = CLng(33554431)
m_lOnBits(25) = CLng(67108863)
m_lOnBits(26) = CLng(134217727)
m_lOnBits(27) = CLng(268435455)
m_lOnBits(28) = CLng(536870911)
m_lOnBits(29) = CLng(1073741823)
m_lOnBits(30) = CLng(2147483647) m_l2Power(0) = CLng(1)
m_l2Power(1) = CLng(2)
m_l2Power(2) = CLng(4)
m_l2Power(3) = CLng(8)
m_l2Power(4) = CLng(16)
m_l2Power(5) = CLng(32)
m_l2Power(6) = CLng(64)
m_l2Power(7) = CLng(128)
m_l2Power(8) = CLng(256)
m_l2Power(9) = CLng(512)
m_l2Power(10) = CLng(1024)
m_l2Power(11) = CLng(2048)
m_l2Power(12) = CLng(4096)
m_l2Power(13) = CLng(8192)
m_l2Power(14) = CLng(16384)
m_l2Power(15) = CLng(32768)
m_l2Power(16) = CLng(65536)
m_l2Power(17) = CLng(131072)
m_l2Power(18) = CLng(262144)
m_l2Power(19) = CLng(524288)
m_l2Power(20) = CLng(1048576)
m_l2Power(21) = CLng(2097152)
m_l2Power(22) = CLng(4194304)
m_l2Power(23) = CLng(8388608)
m_l2Power(24) = CLng(16777216)
m_l2Power(25) = CLng(33554432)
m_l2Power(26) = CLng(67108864)
m_l2Power(27) = CLng(134217728)
m_l2Power(28) = CLng(268435456)
m_l2Power(29) = CLng(536870912)
m_l2Power(30) = CLng(1073741824)

K(0) = &H428A2F98
K(1) = &H71374491
K(2) = &HB5C0FBCF
K(3) = &HE9B5DBA5
K(4) = &H3956C25B
K(5) = &H59F111F1
K(6) = &H923F82A4
K(7) = &HAB1C5ED5
K(8) = &HD807AA98
K(9) = &H12835B01
K(10) = &H243185BE
K(11) = &H550C7DC3
K(12) = &H72BE5D74
K(13) = &H80DEB1FE
K(14) = &H9BDC06A7
K(15) = &HC19BF174
K(16) = &HE49B69C1
K(17) = &HEFBE4786
K(18) = &HFC19DC6
K(19) = &H240CA1CC
K(20) = &H2DE92C6F
K(21) = &H4A7484AA
K(22) = &H5CB0A9DC
K(23) = &H76F988DA
K(24) = &H983E5152
K(25) = &HA831C66D
K(26) = &HB00327C8
K(27) = &HBF597FC7
K(28) = &HC6E00BF3
K(29) = &HD5A79147
K(30) = &H6CA6351
K(31) = &H14292967
K(32) = &H27B70A85
K(33) = &H2E1B2138
K(34) = &H4D2C6DFC
K(35) = &H53380D13
K(36) = &H650A7354
K(37) = &H766A0ABB
K(38) = &H81C2C92E
K(39) = &H92722C85
K(40) = &HA2BFE8A1
K(41) = &HA81A664B
K(42) = &HC24B8B70
K(43) = &HC76C51A3
K(44) = &HD192E819
K(45) = &HD6990624
K(46) = &HF40E3585
K(47) = &H106AA070
K(48) = &H19A4C116
K(49) = &H1E376C08
K(50) = &H2748774C
K(51) = &H34B0BCB5
K(52) = &H391C0CB3
K(53) = &H4ED8AA4A
K(54) = &H5B9CCA4F
K(55) = &H682E6FF3
K(56) = &H748F82EE
K(57) = &H78A5636F
K(58) = &H84C87814
K(59) = &H8CC70208
K(60) = &H90BEFFFA
K(61) = &HA4506CEB
K(62) = &HBEF9A3F7
K(63) = &HC67178F2
end sub
Function Len(ByVal inString As String)
            If inString Is Nothing Then
                Len = 0
            Else
                Len = inString.Length()
            End If
        End Function        Function Mid(ByVal inString As String, ByVal posStart As Long, ByVal intLength As Long)
            Mid = inString.Substring(posStart - 1, intLength)
        End Function        Function InStr(ByVal inString As String, ByVal findString As String) As Long
            If Not findString Is Nothing Then
                If findString.Length() Then
                    InStr = inString.IndexOf(findString) + 1
                End If
            End If
        End Function        Function Right(ByVal inString As String, ByVal numCharacters As Long) As String
            If numCharacters > 0 Then
                If numCharacters >= inString.Length() Then
                    Right = inString
                Else
                    Right = inString.Substring(inString.Length() - numCharacters, numCharacters)
                End If
            End If
        End Function
        Function UBound(ByVal inArray As Array) As Long
            UBound = inArray.GetUpperBound(0)
        End Function        Function AscB(ByVal inString As String) As Byte
            AscB = Microsoft.VisualBasic.Asc(inString.Chars(0))
        End Function
        Function AscW(ByVal inString As String) As Integer
            AscW = Microsoft.VisualBasic.AscW(inString.Chars(0))
        End Function
        Function Asc(ByVal inString As String) As Byte
            Asc = Microsoft.VisualBasic.Asc(inString.Chars(0))
        End Function
Function Chr(ByVal inString As Integer) As String
            Chr = Microsoft.VisualBasic.Chr(inString)
        End Function
        Function Val(ByVal inString As String) As Long
            Val = Microsoft.VisualBasic.Val(inString)
        End Function

解决方案 »

  1.   

    Function Replace(ByVal inString As String, ByVal strFrom As String, ByVal strTo As String) As String
                Replace = Microsoft.VisualBasic.Replace(inString, strFrom, strTo)
            End Function
            Function Abs(ByVal inNumb As Decimal) As Decimal
                If inNumb < 0 Then
                    Return -inNumb
                Else
                    Return inNumb
                End If
            End Function        Function LCase(ByVal inString As String) As String
                LCase = inString.ToLower()
            End Function
            Function Hex(ByVal inNumber As Long) As String
                'Microsoft.VisualBasic.Hex  should work too
                Hex = inNumber.ToString("x")
            End Function
    Private Function LShift(lValue, iShiftBits)
    If iShiftBits = 0 Then
    LShift = lValue
    Exit Function
    ElseIf iShiftBits = 31 Then
    If lValue And 1 Then
    LShift = &H80000000
    Else
    LShift = 0
    End If
    Exit Function
    ElseIf iShiftBits < 0 Or iShiftBits > 31 Then
    Throw (New Exception("error 6"))
    End If

    If (lValue And m_l2Power(31 - iShiftBits)) Then
    LShift = ((lValue And m_lOnBits(31 - (iShiftBits + 1))) * m_l2Power(iShiftBits)) Or &H80000000
    Else
    LShift = ((lValue And m_lOnBits(31 - iShiftBits)) * m_l2Power(iShiftBits))
    End If
    End Function Private Function RShift(lValue, iShiftBits)
    If iShiftBits = 0 Then
    RShift = lValue
    Exit Function
    ElseIf iShiftBits = 31 Then
    If lValue And &H80000000 Then
    RShift = 1
    Else
    RShift = 0
    End If
    Exit Function
    ElseIf iShiftBits < 0 Or iShiftBits > 31 Then
    Throw (New Exception("error 6"))
    End If

    RShift = (lValue And &H7FFFFFFE) \ m_l2Power(iShiftBits)

    If (lValue And &H80000000) Then
    RShift = (RShift Or (&H40000000 \ m_l2Power(iShiftBits - 1)))
    End If
    End Function Private Function AddUnsigned(lX, lY)
    Dim lX4
    Dim lY4
    Dim lX8
    Dim lY8
    Dim lResult
     
    lX8 = lX And &H80000000
    lY8 = lY And &H80000000
    lX4 = lX And &H40000000
    lY4 = lY And &H40000000
     
    lResult = (lX And &H3FFFFFFF) + (lY And &H3FFFFFFF)
     
    If lX4 And lY4 Then
    lResult = lResult Xor &H80000000 Xor lX8 Xor lY8
    ElseIf lX4 Or lY4 Then
    If lResult And &H40000000 Then
    lResult = lResult Xor &HC0000000 Xor lX8 Xor lY8
    Else
    lResult = lResult Xor &H40000000 Xor lX8 Xor lY8
    End If
    Else
    lResult = lResult Xor lX8 Xor lY8
    End If
     
    AddUnsigned = lResult
    End Function Private Function Ch(x, y, z)
    Ch = ((x And y) Xor ((Not x) And z))
    End Function Private Function Maj(x, y, z)
    Maj = ((x And y) Xor (x And z) Xor (y And z))
    End Function Private Function S(x, n)
    S = (RShift(x, (n And m_lOnBits(4))) Or LShift(x, (32 - (n And m_lOnBits(4)))))
    End Function Private Function R(x, n)
    R = RShift(x, CInt(n And m_lOnBits(4)))
    End Function Private Function Sigma0(x)
    Sigma0 = (S(x, 2) Xor S(x, 13) Xor S(x, 22))
    End Function Private Function Sigma1(x)
    Sigma1 = (S(x, 6) Xor S(x, 11) Xor S(x, 25))
    End Function Private Function Gamma0(x)
    Gamma0 = (S(x, 7) Xor S(x, 18) Xor R(x, 3))
    End Function Private Function Gamma1(x)
    Gamma1 = (S(x, 17) Xor S(x, 19) Xor R(x, 10))
    End Function Private Function ConvertToWordArray(sMessage)
    Dim lMessageLength
    Dim lNumberOfWords
    Dim lWordArray()
    Dim lBytePosition
    Dim lByteCount
    Dim lWordCount
    Dim lByte

    Const MODULUS_BITS = 512
    Const CONGRUENT_BITS = 448

    lMessageLength = Len(sMessage)

    lNumberOfWords = (((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS) \ BITS_TO_A_BYTE)) \ (MODULUS_BITS \ BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS \ BITS_TO_A_WORD)
    ReDim lWordArray(lNumberOfWords - 1)

    lBytePosition = 0
    lByteCount = 0
    Do Until lByteCount >= lMessageLength
    lWordCount = lByteCount \ BYTES_TO_A_WORD

    lBytePosition = (3 - (lByteCount Mod BYTES_TO_A_WORD)) * BITS_TO_A_BYTE

    lByte = AscW(Mid(sMessage, lByteCount + 1, 1))
    lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(lByte, lBytePosition)
    lByteCount = lByteCount + 1
    Loop lWordCount = lByteCount \ BYTES_TO_A_WORD
    lBytePosition = (3 - (lByteCount Mod BYTES_TO_A_WORD)) * BITS_TO_A_BYTE lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(&H80, lBytePosition) lWordArray(lNumberOfWords - 1) = LShift(lMessageLength, 3)
    lWordArray(lNumberOfWords - 2) = RShift(lMessageLength, 29)

    ConvertToWordArray = lWordArray
    End Function Public Function SHA256(sMessage)
    Dim HASH(7)
    Dim M
    Dim W(63)
    Dim a
    Dim b
    Dim c
    Dim d
    Dim e
    Dim f
    Dim g
    Dim h
    Dim i
    Dim j
    Dim T1
    Dim T2

    HASH(0) = &H6A09E667
    HASH(1) = &HBB67AE85
    HASH(2) = &H3C6EF372
    HASH(3) = &HA54FF53A
    HASH(4) = &H510E527F
    HASH(5) = &H9B05688C
    HASH(6) = &H1F83D9AB
    HASH(7) = &H5BE0CD19

    M = ConvertToWordArray(sMessage)

    For i = 0 To UBound(M) Step 16
    a = HASH(0)
    b = HASH(1)
    c = HASH(2)
    d = HASH(3)
    e = HASH(4)
    f = HASH(5)
    g = HASH(6)
    h = HASH(7)

    For j = 0 To 63
    If j < 16 Then
    W(j) = M(j + i)
    Else
    W(j) = AddUnsigned(AddUnsigned(AddUnsigned(Gamma1(W(j - 2)), W(j - 7)), Gamma0(W(j - 15))), W(j - 16))
    End If

    T1 = AddUnsigned(AddUnsigned(AddUnsigned(AddUnsigned(h, Sigma1(e)), Ch(e, f, g)), K(j)), W(j))
    T2 = AddUnsigned(Sigma0(a), Maj(a, b, c))

    h = g
    g = f
    f = e
    e = AddUnsigned(d, T1)
    d = c
    c = b
    b = a
    a = AddUnsigned(T1, T2)
    Next

    HASH(0) = AddUnsigned(a, HASH(0))
    HASH(1) = AddUnsigned(b, HASH(1))
    HASH(2) = AddUnsigned(c, HASH(2))
    HASH(3) = AddUnsigned(d, HASH(3))
    HASH(4) = AddUnsigned(e, HASH(4))
    HASH(5) = AddUnsigned(f, HASH(5))
    HASH(6) = AddUnsigned(g, HASH(6))
    HASH(7) = AddUnsigned(h, HASH(7))
    Next

    SHA256 = LCase(Right("00000000" & Hex(HASH(0)), 8) & Right("00000000" & Hex(HASH(1)), 8) & Right("00000000" & Hex(HASH(2)), 8) & Right("00000000" & Hex(HASH(3)), 8) & Right("00000000" & Hex(HASH(4)), 8) & Right("00000000" & Hex(HASH(5)), 8) & Right("00000000" & Hex(HASH(6)), 8) & Right("00000000" & Hex(HASH(7)), 8))
    End Function
    End Class
      

  2.   

    楼主知不知道有个Reflector可以反编译的,不知道的话,到搜索引擎搜下,下载
    把你的VB的代码,放到一个项目里,编译
    然后用Reflector反编译为C#即可~
      

  3.   

    viena(维也纳N02)兄说的软件,我有,如果LZ需要,我可以发给出你
      

  4.   

    Reflector找不到可以下载的,CSDN这个扣了分也不给下载,郁闷
      

  5.   

    下面的示例计算 data 的 SHA256 哈希值,并将它存储在 result 中。此示例假定存在一个预定义的常数 DATA_SIZE。Visual BasicDim data(DATA_SIZE) As Byte
    Dim result() As Byte
    Dim shaM As New SHA256Managed()
    result = shaM.ComputeHash(data) 
    C#byte[] data = new byte[DATA_SIZE];
    byte[] result;
    SHA256 shaM = new SHA256Managed();
    result = shaM.ComputeHash(data); 
    简直服了你们了...都不看MSDN的吗?
      

  6.   

    楼上的,你那个方法是.net自带的,我用过,问题是我现在的计算和.net原始的结果不一样,为了一致我只能用C#参照vb的格式重写一个
      

  7.   

    我在一个smartphone 程序上用需要sha256算法,所以就根据楼主的代码用C#改写了一遍。测试结果ASCII编码数据运算后与.net的SHA256Managed一致,中文由于.net使用unicode编码,所以不一样。
    public class mySHA256
        {
            // Fields
            private const int BITS_TO_A_BYTE = 8;
            private const int BITS_TO_A_WORD = 32;
            private const int BYTES_TO_A_WORD = 4;
            private ulong[] K = new ulong[64];
            private ulong[] m_l2Power = new ulong[31];
            private ulong[] m_lOnBits = new ulong[31];        // Methods
            public mySHA256()
            {
                m_lOnBits[0] = 1L;
                m_lOnBits[1] = 3L;
                m_lOnBits[2] = 7L;
                m_lOnBits[3] = 15L;
                m_lOnBits[4] = 0x1fL;
                m_lOnBits[5] = 0x3fL;
                m_lOnBits[6] = 0x7fL;
                m_lOnBits[7] = 0xffL;
                m_lOnBits[8] = 0x1ffL;
                m_lOnBits[9] = 0x3ffL;
                m_lOnBits[10] = 0x7ffL;
                m_lOnBits[11] = 0xfffL;
                m_lOnBits[12] = 0x1fffL;
                m_lOnBits[13] = 0x3fffL;
                m_lOnBits[14] = 0x7fffL;
                m_lOnBits[15] = 0xffffL;
                m_lOnBits[0x10] = 0x1ffffL;
                m_lOnBits[0x11] = 0x3ffffL;
                m_lOnBits[0x12] = 0x7ffffL;
                m_lOnBits[0x13] = 0xfffffL;
                m_lOnBits[20] = 0x1fffffL;
                m_lOnBits[0x15] = 0x3fffffL;
                m_lOnBits[0x16] = 0x7fffffL;
                m_lOnBits[0x17] = 0xffffffL;
                m_lOnBits[0x18] = 0x1ffffffL;
                m_lOnBits[0x19] = 0x3ffffffL;
                m_lOnBits[0x1a] = 0x7ffffffL;
                m_lOnBits[0x1b] = 0xfffffffL;
                m_lOnBits[0x1c] = 0x1fffffffL;
                m_lOnBits[0x1d] = 0x3fffffffL;
                m_lOnBits[30] = 0x7fffffffL;
                m_l2Power[0] = 1L;
                m_l2Power[1] = 2L;
                m_l2Power[2] = 4L;
                m_l2Power[3] = 8L;
                m_l2Power[4] = 0x10L;
                m_l2Power[5] = 0x20L;
                m_l2Power[6] = 0x40L;
                m_l2Power[7] = 0x80L;
                m_l2Power[8] = 0x100L;
                m_l2Power[9] = 0x200L;
                m_l2Power[10] = 0x400L;
                m_l2Power[11] = 0x800L;
                m_l2Power[12] = 0x1000L;
                m_l2Power[13] = 0x2000L;
                m_l2Power[14] = 0x4000L;
                m_l2Power[15] = 0x8000L;
                m_l2Power[0x10] = 0x10000L;
                m_l2Power[0x11] = 0x20000L;
                m_l2Power[0x12] = 0x40000L;
                m_l2Power[0x13] = 0x80000L;
                m_l2Power[20] = 0x100000L;
                m_l2Power[0x15] = 0x200000L;
                m_l2Power[0x16] = 0x400000L;
                m_l2Power[0x17] = 0x800000L;
                m_l2Power[0x18] = 0x1000000L;
                m_l2Power[0x19] = 0x2000000L;
                m_l2Power[0x1a] = 0x4000000L;
                m_l2Power[0x1b] = 0x8000000L;
                m_l2Power[0x1c] = 0x10000000L;
                m_l2Power[0x1d] = 0x20000000L;
                m_l2Power[30] = 0x40000000L;            K[0] = 0x428A2F98;
                K[1] = 0x71374491;
                K[2] = 0xB5C0FBCF;
                K[3] = 0xE9B5DBA5;
                K[4] = 0x3956C25B;
                K[5] = 0x59F111F1;
                K[6] = 0x923F82A4;
                K[7] = 0xAB1C5ED5;
                K[8] = 0xD807AA98;
                K[9] = 0x12835B01;
                K[10] = 0x243185BE;
                K[11] = 0x550C7DC3;
                K[12] = 0x72BE5D74;
                K[13] = 0x80DEB1FE;
                K[14] = 0x9BDC06A7;
                K[15] = 0xC19BF174;
                K[16] = 0xE49B69C1;
                K[17] = 0xEFBE4786;
                K[18] = 0xFC19DC6;
                K[19] = 0x240CA1CC;
                K[20] = 0x2DE92C6F;
                K[21] = 0x4A7484AA;
                K[22] = 0x5CB0A9DC;
                K[23] = 0x76F988DA;
                K[24] = 0x983E5152;
                K[25] = 0xA831C66D;
                K[26] = 0xB00327C8;
                K[27] = 0xBF597FC7;
                K[28] = 0xC6E00BF3;
                K[29] = 0xD5A79147;
                K[30] = 0x6CA6351;
                K[31] = 0x14292967;
                K[32] = 0x27B70A85;
                K[33] = 0x2E1B2138;
                K[34] = 0x4D2C6DFC;
                K[35] = 0x53380D13;
                K[36] = 0x650A7354;
                K[37] = 0x766A0ABB;
                K[38] = 0x81C2C92E;
                K[39] = 0x92722C85;
                K[40] = 0xA2BFE8A1;
                K[41] = 0xA81A664B;
                K[42] = 0xC24B8B70;
                K[43] = 0xC76C51A3;
                K[44] = 0xD192E819;
                K[45] = 0xD6990624;
                K[46] = 0xF40E3585;
                K[47] = 0x106AA070;
                K[48] = 0x19A4C116;
                K[49] = 0x1E376C08;
                K[50] = 0x2748774C;
                K[51] = 0x34B0BCB5;
                K[52] = 0x391C0CB3;
                K[53] = 0x4ED8AA4A;
                K[54] = 0x5B9CCA4F;
                K[55] = 0x682E6FF3;
                K[56] = 0x748F82EE;
                K[57] = 0x78A5636F;
                K[58] = 0x84C87814;
                K[59] = 0x8CC70208;
                K[60] = 0x90BEFFFA;
                K[61] = 0xA4506CEB;
                K[62] = 0xBEF9A3F7;
                K[63] = 0xC67178F2;
            }        private ulong AddUnsigned(ulong lX, ulong lY)
            {
                ulong lX8 = lX & 0x80000000;
                ulong lY8 = lY & 0x80000000;
                ulong lX4 = lX & 0x40000000;
                ulong lY4 = lY & 0x40000000;
                ulong lResult = (lX & 0x3fffffff) + (lY & 0x3fffffff);
                if ((lX4 & lY4)!=0)
                {
                    lResult = lResult ^ 0x80000000 ^ lX8 ^ lY8;
                }
                else if (0!=(lX4 | lY4))
                {
                    if (0!=(lResult & 0x40000000))
                    {
                        lResult = lResult ^ 0xC0000000 ^ lX8 ^ lY8;
                    }
                    else
                    {
                        lResult = lResult ^ 0x40000000 ^ lX8 ^ lY8;
                    }
                }
                else
                {
                    lResult = lResult ^ lX8 ^ lY8;
                }
                return lResult;
            }        
      

  8.   


    我在一个smartphone 程序上用需要sha256算法,所以就根据楼主的代码用C#改写了一遍。测试结果ASCII编码数据运算后与.net的SHA256Managed一致,中文由于.net使用unicode编码,所以不一样。
    public class mySHA256
        {
            // Fields
            private const int BITS_TO_A_BYTE = 8;
            private const int BITS_TO_A_WORD = 32;
            private const int BYTES_TO_A_WORD = 4;
            private ulong[] K = new ulong[64];
            private ulong[] m_l2Power = new ulong[31];
            private ulong[] m_lOnBits = new ulong[31];        // Methods
            public mySHA256()
            {
                m_lOnBits[0] = 1L;
                m_lOnBits[1] = 3L;
                m_lOnBits[2] = 7L;
                m_lOnBits[3] = 15L;
                m_lOnBits[4] = 0x1fL;
                m_lOnBits[5] = 0x3fL;
                m_lOnBits[6] = 0x7fL;
                m_lOnBits[7] = 0xffL;
                m_lOnBits[8] = 0x1ffL;
                m_lOnBits[9] = 0x3ffL;
                m_lOnBits[10] = 0x7ffL;
                m_lOnBits[11] = 0xfffL;
                m_lOnBits[12] = 0x1fffL;
                m_lOnBits[13] = 0x3fffL;
                m_lOnBits[14] = 0x7fffL;
                m_lOnBits[15] = 0xffffL;
                m_lOnBits[0x10] = 0x1ffffL;
                m_lOnBits[0x11] = 0x3ffffL;
                m_lOnBits[0x12] = 0x7ffffL;
                m_lOnBits[0x13] = 0xfffffL;
                m_lOnBits[20] = 0x1fffffL;
                m_lOnBits[0x15] = 0x3fffffL;
                m_lOnBits[0x16] = 0x7fffffL;
                m_lOnBits[0x17] = 0xffffffL;
                m_lOnBits[0x18] = 0x1ffffffL;
                m_lOnBits[0x19] = 0x3ffffffL;
                m_lOnBits[0x1a] = 0x7ffffffL;
                m_lOnBits[0x1b] = 0xfffffffL;
                m_lOnBits[0x1c] = 0x1fffffffL;
                m_lOnBits[0x1d] = 0x3fffffffL;
                m_lOnBits[30] = 0x7fffffffL;
                m_l2Power[0] = 1L;
                m_l2Power[1] = 2L;
                m_l2Power[2] = 4L;
                m_l2Power[3] = 8L;
                m_l2Power[4] = 0x10L;
                m_l2Power[5] = 0x20L;
                m_l2Power[6] = 0x40L;
                m_l2Power[7] = 0x80L;
                m_l2Power[8] = 0x100L;
                m_l2Power[9] = 0x200L;
                m_l2Power[10] = 0x400L;
                m_l2Power[11] = 0x800L;
                m_l2Power[12] = 0x1000L;
                m_l2Power[13] = 0x2000L;
                m_l2Power[14] = 0x4000L;
                m_l2Power[15] = 0x8000L;
                m_l2Power[0x10] = 0x10000L;
                m_l2Power[0x11] = 0x20000L;
                m_l2Power[0x12] = 0x40000L;
                m_l2Power[0x13] = 0x80000L;
                m_l2Power[20] = 0x100000L;
                m_l2Power[0x15] = 0x200000L;
                m_l2Power[0x16] = 0x400000L;
                m_l2Power[0x17] = 0x800000L;
                m_l2Power[0x18] = 0x1000000L;
                m_l2Power[0x19] = 0x2000000L;
                m_l2Power[0x1a] = 0x4000000L;
                m_l2Power[0x1b] = 0x8000000L;
                m_l2Power[0x1c] = 0x10000000L;
                m_l2Power[0x1d] = 0x20000000L;
                m_l2Power[30] = 0x40000000L;            K[0] = 0x428A2F98;
                K[1] = 0x71374491;
                K[2] = 0xB5C0FBCF;
                K[3] = 0xE9B5DBA5;
                K[4] = 0x3956C25B;
                K[5] = 0x59F111F1;
                K[6] = 0x923F82A4;
                K[7] = 0xAB1C5ED5;
                K[8] = 0xD807AA98;
                K[9] = 0x12835B01;
                K[10] = 0x243185BE;
                K[11] = 0x550C7DC3;
                K[12] = 0x72BE5D74;
                K[13] = 0x80DEB1FE;
                K[14] = 0x9BDC06A7;
                K[15] = 0xC19BF174;
                K[16] = 0xE49B69C1;
                K[17] = 0xEFBE4786;
                K[18] = 0xFC19DC6;
                K[19] = 0x240CA1CC;
                K[20] = 0x2DE92C6F;
                K[21] = 0x4A7484AA;
                K[22] = 0x5CB0A9DC;
                K[23] = 0x76F988DA;
                K[24] = 0x983E5152;
                K[25] = 0xA831C66D;
                K[26] = 0xB00327C8;
                K[27] = 0xBF597FC7;
                K[28] = 0xC6E00BF3;
                K[29] = 0xD5A79147;
                K[30] = 0x6CA6351;
                K[31] = 0x14292967;
                K[32] = 0x27B70A85;
                K[33] = 0x2E1B2138;
                K[34] = 0x4D2C6DFC;
                K[35] = 0x53380D13;
                K[36] = 0x650A7354;
                K[37] = 0x766A0ABB;
                K[38] = 0x81C2C92E;
                K[39] = 0x92722C85;
                K[40] = 0xA2BFE8A1;
                K[41] = 0xA81A664B;
                K[42] = 0xC24B8B70;
                K[43] = 0xC76C51A3;
                K[44] = 0xD192E819;
                K[45] = 0xD6990624;
                K[46] = 0xF40E3585;
                K[47] = 0x106AA070;
                K[48] = 0x19A4C116;
                K[49] = 0x1E376C08;
                K[50] = 0x2748774C;
                K[51] = 0x34B0BCB5;
                K[52] = 0x391C0CB3;
                K[53] = 0x4ED8AA4A;
                K[54] = 0x5B9CCA4F;
                K[55] = 0x682E6FF3;
                K[56] = 0x748F82EE;
                K[57] = 0x78A5636F;
                K[58] = 0x84C87814;
                K[59] = 0x8CC70208;
                K[60] = 0x90BEFFFA;
                K[61] = 0xA4506CEB;
                K[62] = 0xBEF9A3F7;
                K[63] = 0xC67178F2;
            }        private ulong AddUnsigned(ulong lX, ulong lY)
            {
                ulong lX8 = lX & 0x80000000;
                ulong lY8 = lY & 0x80000000;
                ulong lX4 = lX & 0x40000000;
                ulong lY4 = lY & 0x40000000;
                ulong lResult = (lX & 0x3fffffff) + (lY & 0x3fffffff);
                if ((lX4 & lY4)!=0)
                {
                    lResult = lResult ^ 0x80000000 ^ lX8 ^ lY8;
                }
                else if (0!=(lX4 | lY4))
                {
                    if (0!=(lResult & 0x40000000))
                    {
                        lResult = lResult ^ 0xC0000000 ^ lX8 ^ lY8;
                    }
                    else
                    {
                        lResult = lResult ^ 0x40000000 ^ lX8 ^ lY8;
                    }
                }
                else
                {
                    lResult = lResult ^ lX8 ^ lY8;
                }
                return lResult;
            }
      

  9.   

    private ulong AddUnsigned(ulong lX, ulong lY)
            {
                ulong lX8 = lX & 0x80000000;
                ulong lY8 = lY & 0x80000000;
                ulong lX4 = lX & 0x40000000;
                ulong lY4 = lY & 0x40000000;
                ulong lResult = (lX & 0x3fffffff) + (lY & 0x3fffffff);
                if ((lX4 & lY4)!=0)
                {
                    lResult = lResult ^ 0x80000000 ^ lX8 ^ lY8;
                }
                else if (0!=(lX4 | lY4))
                {
                    if (0!=(lResult & 0x40000000))
                    {
                        lResult = lResult ^ 0xC0000000 ^ lX8 ^ lY8;
                    }
                    else
                    {
                        lResult = lResult ^ 0x40000000 ^ lX8 ^ lY8;
                    }
                }
                else
                {
                    lResult = lResult ^ lX8 ^ lY8;
                }
                return lResult;
            }        public int AscW(string inString)
            {
                return inString[0];
            }        private ulong Ch(ulong x, ulong y, ulong z)
            {
                return (x & y) ^ (~x & z);
            }        private ulong[] ConvertToWordArray(string sMessage)
            {
                const long MODULUS_BITS = 512 ;
                const long CONGRUENT_BITS = 448;            ulong lWordCount;
                ulong lMessageLength = this.Len(sMessage);
                ulong lNumberOfWords = (((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS) / BITS_TO_A_BYTE)) / (MODULUS_BITS / BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS / BITS_TO_A_WORD);            ulong[] lWordArray = new ulong[lNumberOfWords];
                ulong lBytePosition = 0;
                ulong lByteCount = 0;            while (lByteCount < lMessageLength)
                {
                    lWordCount = lByteCount / BYTES_TO_A_WORD;
                    lBytePosition = (3 - (lByteCount % BYTES_TO_A_WORD)) * BITS_TO_A_BYTE;                ulong lByte = (ulong)this.AscW(this.Mid(sMessage, (long)lByteCount + 1, 1L));
                    lWordArray[lWordCount] = lWordArray[lWordCount] | this.LShift(lByte, lBytePosition);
                    lByteCount += 1;
                }
                
                lWordCount = lByteCount / BYTES_TO_A_WORD;
                lBytePosition = (3 - (lByteCount % BYTES_TO_A_WORD)) * BITS_TO_A_BYTE;            lWordArray[lWordCount] = lWordArray[lWordCount] | this.LShift(0x80, lBytePosition);
                lWordArray[lNumberOfWords - 1] = this.LShift((ulong)lMessageLength, 3);
                lWordArray[lNumberOfWords - 2] = this.RShift((ulong)lMessageLength, 29);
                return lWordArray;
            }        private ulong Gamma0(ulong x)
            {
                return (this.S(x, 7) ^ this.S(x, 18) ^ this.R(x, 3)) ;
            }        private ulong Gamma1(ulong x)
            {
                return (S(x, 17) ^ S(x, 19) ^ R(x, 10));
            }        public string Hex(ulong inNumber)
            {
                return inNumber.ToString("x");
            }        public long InStr(string inString, string findString)
            {
                long InStr=0;
                if ((findString != null) && (findString.Length > 0))
                {
                    InStr = inString.IndexOf(findString) + 1;
                }
                return InStr;
            }        public string LCase(string inString)
            {
                return inString.ToLower();
            }        public ulong Len(string inString)
            {
                if (inString == null)
                {
                    return 0;
                }
                return (ulong)inString.Length;
            }        
      

  10.   

    private ulong LShift(ulong lValue, ulong iShiftBits)
            {
                if (iShiftBits == 0)
                {
                    return lValue;
                }
                if (iShiftBits == 31)
                {
                    if ((lValue & 1L) !=0)
                    {
                        return 0x80000000;
                    }
                    return 0;
                }            if(iShiftBits < 0 || iShiftBits > 31)
                {
                    throw new Exception("error 6");
                }            if ((lValue & this.m_l2Power[31 - iShiftBits])!=0)
                {
                    return ((lValue & this.m_lOnBits[31 - (iShiftBits + 1)]) * this.m_l2Power[iShiftBits]) | 0x80000000;
                }
                return (lValue & this.m_lOnBits[31 - iShiftBits]) * this.m_l2Power[iShiftBits];
            }        private ulong Maj(ulong x, ulong y, ulong z)
            {
                return  (x & y) ^ (x & z) ^ (y & z);
            }        public string  Mid(string inString, long posStart, long intLength)
            {
                return inString.Substring((int)(posStart - 1L), (int)intLength);
            }        private ulong R(ulong x, ulong n)
            {
                return  this.RShift(x,  n & this.m_lOnBits[4]);
            }        public string Replace(string inString, string strFrom, string strTo)
            {
                return inString.Replace(strFrom, strTo);
            }        public string Right(string inString, long numCharacters)
            {
                if (numCharacters > 0L)
                {
                    if (numCharacters >= inString.Length)
                    {
                        return inString;
                    }
                    return inString.Substring(inString.Length - ((int)numCharacters), (int)numCharacters);
                }
                return "";
            }        private ulong RShift(ulong lValue, ulong iShiftBits)
            {
                if (iShiftBits==0)
                {
                    return lValue;
                }
                if (iShiftBits == 31)
                {
                    if ((lValue & 0x80000000)!=0)
                    {
                        return 1;
                    }
                    return 0;
                }
                if (iShiftBits < 0 || iShiftBits > 31 )
                {
                    throw new Exception("error 6");
                }
                ulong lRShift = (lValue & 0x7ffffffe) / this.m_l2Power[iShiftBits];
                if ((lValue & 0x80000000) != 0)
                {
                    lRShift = lRShift | (0x40000000 / this.m_l2Power[iShiftBits - 1]);
                }
                return lRShift;
            }        private ulong S(ulong x, ulong n)
            {
                return this.RShift(x, n & this.m_lOnBits[4]) | this.LShift(x, 32 - n & this.m_lOnBits[4]);
            }        public string toSHA256(string sMessage)
            {            ulong[] HASH = new ulong[8];
                ulong[] W = new ulong[64];
                HASH[0] = 0x6a09e667;
                HASH[1] = 0xBB67AE85;
                HASH[2] = 0x3c6ef372;
                HASH[3] = 0xA54FF53A;
                HASH[4] = 0x510e527f;
                HASH[5] = 0x9B05688C;
                HASH[6] = 0x1f83d9ab;
                HASH[7] = 0x5be0cd19;
                ulong T1, T2;
                ulong[] M = this.ConvertToWordArray(sMessage);
                
                for (int i = 0; i <= this.UBound(M);i+=16 )
                {
                    ulong a = HASH[0];
                    ulong b = HASH[1];
                    ulong c = HASH[2];
                    ulong d = HASH[3];
                    ulong e = HASH[4];
                    ulong f = HASH[5];
                    ulong g = HASH[6];
                    ulong h = HASH[7];                for(int j=0;j<=63;j++)
                    {
                        if(j<16)
                        {
                            W[j] = M[j + i];
                        }
                        else
                            W[j] = AddUnsigned(AddUnsigned(AddUnsigned(Gamma1(W[j - 2]), W[j - 7]), Gamma0(W[j - 15])), W[j - 16]);                    T1 = AddUnsigned(AddUnsigned(AddUnsigned(AddUnsigned(h, Sigma1(e)), Ch(e, f, g)), K[j]), W[j]);
                        T2 = AddUnsigned(Sigma0(a), Maj(a, b, c));                    h = g;
                        g = f;
                        f = e;
                        e = AddUnsigned(d, T1);
                        d = c;
                        c = b;
                        b = a;
                        a = AddUnsigned(T1, T2);
                    }                HASH[0] = AddUnsigned(a, HASH[0]);
                    HASH[1] = AddUnsigned(b, HASH[1]);
                    HASH[2] = AddUnsigned(c, HASH[2]);
                    HASH[3] = AddUnsigned(d, HASH[3]);
                    HASH[4] = AddUnsigned(e, HASH[4]);
                    HASH[5] = AddUnsigned(f, HASH[5]);
                    HASH[6] = AddUnsigned(g, HASH[6]);
                    HASH[7] = AddUnsigned(h, HASH[7]);
                }            return this.LCase(this.Right("00000000" + this.Hex(HASH[0]), 8L) + this.Right("00000000" + this.Hex(HASH[1]), 8L) + this.Right("00000000" + this.Hex(HASH[2]), 8L) + this.Right("00000000" + this.Hex(HASH[3]), 8L) + this.Right("00000000" + this.Hex(HASH[4]), 8L) + this.Right("00000000" + this.Hex(HASH[5]), 8L) + this.Right("00000000" + this.Hex(HASH[6]), 8L) + this.Right("00000000" + this.Hex(HASH[7]), 8L));
            }        private ulong Sigma0(ulong x)
            {
                return this.S(x, 2) ^ this.S(x, 13) ^ this.S(x, 0x16);
            }        private ulong Sigma1(ulong x)
            {
                return this.S(x, 6) ^ this.S(x, 11) ^ this.S(x, 0x19);
            }        public long UBound(Array inArray)
            {
                return (long)inArray.GetUpperBound(0);
            }
        }//end of class mySHA256