vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
HMAC MD5 Prüfsumme 
Autor: GrisuChris
Datum: 27.07.05 13:14

 
Hallo habe in VB6 Folgenden Code um eine HMAC MD5 Prüfsumme zu errechnen. Ich kriegs aber unter Vb.net keine Korrekten ergebnise.
Gibt es eine Ersatzfunction für StrConv? Ich benutze
bytExpression1 = Encoding.ASCII.GetBytes(Expression1)
Die Function MD5 habe ich in VB.Net ersetzt. durch
 Private Function MD5(ByVal Key As String) As String
        Dim tmpSource() As Byte
        Dim tmpHash() As Byte
        Dim md As New MD5CryptoServiceProvider
        tmpSource = ASCIIEncoding.ASCII.GetBytes(Key)
 
        tmpHash = md.ComputeHash(tmpSource)
 
        Return ByteArrayToString(tmpHash)
 
    End Function
    Private Function ByteArrayToString(ByVal arrInput() As Byte) As String
        Dim i As Integer
        Dim sOutput As New StringBuilder(arrInput.Length)
        For i = 0 To arrInput.Length - 1
            sOutput.Append(arrInput(i).ToString("x2"))
        Next
        Return sOutput.ToString()
    End Function
So siehts es in VB6 aus. Benutze das ganze um einen SMTP CRAM-MD5 Login zu machen. Und Wollte es nun umsetzten.

Private Function MD5(Key As String) As String
    Dim strHash           As String
    Dim lngResult         As Long
    Dim lngHHash          As Long
    Dim lngHCryptProvider As Long
    Dim lngHashLength     As Long
    Dim i                 As Long
    Dim abytBuffer()      As Byte
    '
    Const cstBufferSize As Long = 256
    '
    ReDim abytBuffer(0 To cstBufferSize)
    '
    lngResult = CryptAcquireContext(lngHCryptProvider, vbNullString, _
      MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)
    If lngResult = 1 Then
        lngResult = CryptCreateHash(lngHCryptProvider, CALG_MD5, 0, 0, lngHHash)
        If lngResult = 1 Then
            lngResult = CryptHashData(lngHHash, Key, Len(Key), 0)
            If lngResult = 1 Then
                lngResult = CryptGetHashParam(lngHHash, HP_HASHSIZE, abytBuffer( _
                  0), cstBufferSize, 0)
                If lngResult = 1 Then
                    lngHashLength = abytBuffer(0)
                    lngResult = CryptGetHashParam(lngHHash, HP_HASHVAL, _
                      abytBuffer(0), cstBufferSize, 0)
                    If lngResult = 1 Then
                        For i = 0 To (lngHashLength - 1)
                            If abytBuffer(i) < 16 Then
                                strHash = strHash & "0"
                            End If
                            strHash = strHash & LCase(Hex(abytBuffer(i)))
                        Next i
                    End If
                End If
            End If
        End If
    End If
    '
    MD5 = strHash
End Function
 
'Private Function HMAC_MD5(Key As String, Data As String) As String
    Dim iPad As String
    Dim oPad As String
    '
    Const MD5_BLOCK_LEN As Long = &H40&
    '
    If Len(Key) > MD5_BLOCK_LEN Then
        Key = Pack(MD5(Key))
    End If
    '
    Key = Key & String((MD5_BLOCK_LEN - Len(Key)), vbNullChar)
    '
    iPad = String(MD5_BLOCK_LEN, Chr$(&H36))
    oPad = String(MD5_BLOCK_LEN, Chr$(&H5C))
    '
    iPad = StrXor(Key, iPad)
    oPad = StrXor(Key, oPad)
    '
    HMAC_MD5 = MD5(oPad & Pack(MD5(iPad & Data)))
End Function
 
Private Function StrXor(Expression1 As String, Expression2 As String) As String
    Dim strReturn        As String
    Dim i                As Long
    Dim bytReturn()      As Byte
    Dim bytExpression1() As Byte
    Dim bytExpression2() As Byte
    '
    If Len(Expression1) = Len(Expression2) Then
        bytExpression1() = StrConv(Expression1, vbFromUnicode)
        bytExpression2() = StrConv(Expression2, vbFromUnicode)
        '
        ReDim bytReturn(LBound(bytExpression1()) To UBound(bytExpression1()))
        '
        For i = LBound(bytExpression1()) To UBound(bytExpression1())
            bytReturn(i) = bytExpression1(i) Xor bytExpression2(i)
        Next i
        '
        strReturn = StrConv(bytReturn(), vbUnicode)
    End If
    '
    StrXor = strReturn
End Function
 
Private Function Pack(strData As String) As String
    Dim strPack As String
    Dim lngLen  As Long
    Dim lngPos  As Long
    '
    lngLen = Len(strData)
    lngPos = 1
    '
    Do While (lngPos < lngLen)
        strPack = strPack & Chr$(Val("&H" & Mid(strData, lngPos, 2)))
        lngPos = lngPos + 2
    Loop
    '
    Pack = strPack
End Function
V ielen Dank schon mal im vorraus
mfg Chris
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
HMAC MD5 Prüfsumme1.629GrisuChris27.07.05 13:14
Re: HMAC MD5 Prüfsumme912ModeratorDaveS27.07.05 13:33
Re: HMAC MD5 Prüfsumme720GrisuChris27.07.05 13:54
Re: HMAC MD5 Prüfsumme1.126ModeratorDaveS27.07.05 14:10
Re: HMAC MD5 Prüfsumme710GrisuChris27.07.05 16:08

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel