Witam, ma do szkoły zrobić program gdzie musze zaimplementować hmacsha-1, vb.net jest juz gotowa bliblioteka ale gosciu sie uparl i kazal abysmy sami zrobili wedlug http://pl.wikipedia.org/wiki/HMAC

Piszę program w vb.net i w sumie skonczylem ale krzacza mi bledy i nie wiem dlaczego...bede wdzieczny za pomoc.

 
Imports System.Security.Cryptography
Imports System.IO
Imports System.Collections.Generic
Imports System.ComponentModel

Public Class Form1
    Dim klucz, Wiadomosc As String

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        klucz = TextBox2.Text
        Wiadomosc = TextBox1.Text
        MessageBox.Show(StringNahexa(klucz))
        MessageBox.Show(StringNahexa(Wiadomosc))
        TextBox3.Text = h(Wiadomosc, klucz)
    End Sub
    'tutaj funckaj hashująca sha-1
    Function getSHA1Hash(ByVal Dana As String) As String
        Dim sha1Obj As New Security.Cryptography.SHA1CryptoServiceProvider
        Dim bytesToHash() As Byte = System.Text.Encoding.ASCII.GetBytes(Dana)
        bytesToHash = sha1Obj.ComputeHash(bytesToHash)
        Dim strResult As String = ""
        For Each b As Byte In bytesToHash
            strResult += b.ToString("x2")
        Next
        Return strResult
    End Function

    'funkcja hmac
    Public Function h(ByVal WiadomoscStr As String, ByVal KluczStr As String) As String
        Dim B(64) As Byte
        ' Dim opad() As Byte = {(Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C)), (Hex(&H5C))}
        'Dim ipad() As Byte = {(Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36)), (Hex(&H36))}
        Dim opad(64) As Byte
        Dim ipad(64) As Byte
        KluczStr = StringNahexa(klucz) ' tutaj zamienia wpisany klucz na hexa , funckja StringNahexa
        WiadomoscStr = StringNahexa(Wiadomosc) ' a tutaj wiadomosc/daną na hexa, funcka StringNahexa

        If KluczStr.Length > B.Length Then
            'gdy jest dłuższy niż B bajtów, należy obliczyć jego skrót używając funkcji h i uzupełnić zerami do długości B bajtów.
            KluczStr = getSHA1Hash(KluczStr)
        End If
        If KluczStr.Length < B.Length Then
            'gdy jest krótszy niż B bajtów, należy go wydłużyć dodając bajty o wartości zero,
            KluczStr = KluczStr & ((B.Length - KluczStr.Length) & Chr(&H0)).ToString
        End If
        For i = 0 To B.Length - 1
            ipad(i) = &H36
            opad(i) = &H5C
        Next

        For i = 0 To B.Length - 1
            ipad(i) = ipad(i) Xor KluczStr
            opad(i) = opad(i) Xor KluczStr
            'ipad(i) = ipad(i) & Chr(&H36 Xor Asc(CStr(Mid(KluczStr, i + 1, 1)))) 'sciagnienie z neta wypelnianie ipada
            'opad(i) = opad(i) & Chr(&H5C Xor Asc(CStr(Mid(KluczStr, i + 1, 1)))) 'sciagniete z neta wypelnianie opada
            ' ipad(i) = AscW(Chr(&H36))
        Next
        Return getSHA1Hash(opad.ToString & getSHA1Hash(ipad.ToString & WiadomoscStr))
    End Function

    Function StringNahexa(ByVal tekst As String)
        Dim hex As String
       
        For i As Integer = 0 To tekst.Length - 1
            hex &= Asc(tekst.Substring(i, 1)).ToString("x").ToUpper
        Next
        Return hex
    End Function

End Class