Entendiendo y traduciendo el pseudocódigo de la funcion para calcular hmac

Iniciado por Carloswaldo, 18 Julio 2009, 20:59 PM

0 Miembros y 1 Visitante están viendo este tema.

Carloswaldo

Bueno pues me he puesto a tratar de comprender y traducir el pseudocódigo que aparece en wikipedia de la función para calcular hmac, osea este:

function hmac (key, message)
    opad = [0x5c * blocksize] // Where blocksize is that of the underlying hash function
    ipad = [0x36 * blocksize]

    if (length(key) > blocksize) then
        key = hash(key) // keys longer than blocksize are shortened
    end if

    for i from 0 to length(key) - 1 step 1
        ipad[i] = ipad[i] ⊕ key[i] // Where ⊕ is exclusive or (XOR)
        opad[i] = opad[i] ⊕ key[i]
    end for

    return hash(opad ++ hash(ipad ++ message)) // Where ++ is concatenation
end function


Y me ha quedado esto:

Código (vb) [Seleccionar]
Function hmac(cadena As String, llave() As String)
    Dim key As String
    key = ""
    For j = 0 To UBound(llave())
        key = key & llave(I)
    Next j
    Dim a As New clsSHA
    Dim opad(&H5C * &H200), ipad(&H36 * &H200)
    'opad = (&H5C * &H200)
    'ipad = (&H36 * &H200)
    If Len(key) > &H200 Then
        key = a.SHA1(key)
    End If
    For I = 0 To Len(key)
        ipad(I) = ipad(I) Xor llave(I)
        opad(I) = opad(I) Xor llave(I)
    Next I
    hmac = a.SHA1(opad & a.SHA1(ipad & cadena))
End Function


Le he hecho tantos cambios que ya no se donde mismo está el error. xD Las únicas 2 líneas de código que no se que significan son las dos primeras.

    opad = [0x5c * blocksize] // Where blocksize is that of the underlying hash function
    ipad = [0x36 * blocksize]


Se que opad y ipad tienen que ser arrays, 0x5c y 0x36 son valores hexadecimales fijos, y blocksize es un valor fijo (512) que en hex sería 200. Lo que no se es que significan esas lineas, como tengo que declarar esos arrays y de que tamaño tienen que ser.

Algún alma caritativa se apiade de mí y me pueda ayudar un poco. :)

cobein

opad e ipad parecen byte arrays, el tamano es valor * blocksize, blocksize es el mismo que se usa en el hash.
http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.

el_c0c0

no se si va al caso pero fijate esto:

primer item:
For I = 0 To Len(key) ' aca deberia ir -1

segundo item:
hmac = a.SHA1(opad & a.SHA1(ipad & cadena)) ' opad e ipad son arrays, deberias traducirlo a un string (con strconv) para poder llamar a esa funcion

saludos
'-     coco
"Te voy a romper el orto"- Las hemorroides

Dessa

Tambien fijate porque llamas a la variable "I" en el primer for.
Adrian Desanti