Code : Tout sélectionner
UseMD5Fingerprint()
Procedure.s hextoasc(entrer.s)
For a = 1 To Len(entrer.s) Step 2
sortie.s+Chr(Val("$"+Mid(entrer.s,a,2)))
Next a
ProcedureReturn sortie.s
EndProcedure
Procedure.s hmac_md5(key.s,msg.s)
If(Len(key.s)>64); Si key est plus grand que 64 octets...
key.s=StringFingerprint(key.s, #PB_Cipher_MD5,#PB_Ascii)
key.s=hextoasc(key.s)
EndIf
key.s=LSet(key.s,64,Chr(0));Il faut que la clef soit de 64 octets, on ajoute donc autant de fois que necessaire le caractères ASCII 0.
ipad.s=LSet(ipad.s,64,Chr($36));On prépare la variable ipad (64 fois le caractère $36)
opad.s=LSet(opad.s,64,Chr($5c));On prépare la variable opad (64 fois le caractère $5c)
For a=1 To 64
opadt.s+Chr(Asc(Mid(opad,a,1))!Asc(Mid(key,a,1))); on prépare la variable opadt (opad XOR key)
ipadt.s+Chr(Asc(Mid(ipad,a,1))!Asc(Mid(key,a,1))); on prépare la variable ipadt (ipad XOR key)
Next a
ipadt.s+msg.s;on ajoute le message a ipad.
hipad.s=StringFingerprint(ipadt.s, #PB_Cipher_MD5,#PB_Ascii)
opadt.s+hextoasc(hipad.s)
hopad.s=StringFingerprint(opadt.s, #PB_Cipher_MD5,#PB_Ascii)
ProcedureReturn hopad.s
EndProcedure
key.s=InputRequester("Programme de test HMAC MD5 :","KEY :","")
Message.s=InputRequester("Programme de test HMAC MD5 :","Message :","")
MessageRequester("Resultat :",hmac_md5(key.s,message.s))
End
Calculateur en ligne