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