[résolu] Traduire une fonction VB en PB

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Traduire une fonction VB en PB

Message par falsam »

Une autre solution serait de coder ton nombre avec une fonction de hachage cryptographique.

caussatjerome à créer une procédure de calcul d'empreinte "Keyed Secure Hash Algorithme 1" (HMAC-SHA1) que tu peux implémenter.

Code : Tout sélectionner

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_sha1(key.s,msg.s)
  If(Len(key.s)>64); Si key est plus grand que 64 octets...
    key.s=SHA1Fingerprint(@key.s,Len(key.s))
    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=SHA1Fingerprint(@ipadt.s,Len(ipadt.s))
  opadt.s+hextoasc(hipad.s)
  hopad.s=SHA1Fingerprint(@opadt.s,Len(opadt.s))
  ProcedureReturn hopad.s
EndProcedure

Key$ = "tacledecodage"

For i = 1 To 100
  hmac.s=hmac_sha1(key$,Str(i))
  Debug hmac
Next
ou tout simplement

Code : Tout sélectionner

hmac.s=hmac_sha1(key$,"123345674589")
Debug hmac
Par contre il faudrait lui demander une procédure de décodage.

Le post d'origine : http://www.purebasic.fr/french/viewtopi ... 54#p153054
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Traduire une fonction VB en PB

Message par Micoute »

Merci beaucoup falsam, mais ça me sort toujours la même réponse quel que soit la clé ou le nombre, alors je ne comprend pas.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Traduire une fonction VB en PB

Message par falsam »

Micoute a écrit :ça me sort toujours la même réponse quel que soit la clé ou le nombre
je viens de faire un test sur deux nombres :

Code : Tout sélectionner

Key$ = "tacledecodage"

hmac.s=hmac_sha1(key$,"123345674589")
Debug hmac

hmac.s=hmac_sha1(key$,"123345674690")
Debug hmac
réponse

Code : Tout sélectionner

e64fab1cc511df21df1115e723608c5a8529327c
f4be43f88a8b74a34bbf42cd3380dd43529740c0
Le résultat est bien différent.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Traduire une fonction VB en PB

Message par falsam »

Une autre manière de faire qui utilise la La bibliothèque Cipher

Tu trouveras deux procédures pour encoder et décoder un nombre.

Code : Tout sélectionner

;Coder un nombre
Procedure.s EncodeNombre(Nombre)
  Protected Buffer.s, *CipheredString
  
  ;On Ajuste la longueur de la chaîne de caractères (ici le nombre) 
  ;en y ajoutant le caractére "0" en début de chaîne pour atteindre la longueur spécifiée (ici 16). 
  Buffer = RSet(Str(Nombre), 16, "0")
  *CipheredString   = AllocateMemory(Len(Buffer)+1)
  
  ;Encodage du nombre en utilisant l'algorithme AES dans le tampon de sortie.
  AESEncoder(@Buffer, *CipheredString, Len(Buffer), ?Key, 128, ?InitializationVector)
  ProcedureReturn PeekS(*CipheredString)
EndProcedure

;Decoder un nombre
Procedure.s DecodeNombre(*CipheredString)
  Protected Buffer.s, *DecipheredString, N.i
  
  *DecipheredString = AllocateMemory(17) ;16+1
  
  AESDecoder(*CipheredString, *DecipheredString, 16, ?Key, 128, ?InitializationVector)
  Buffer=PeekS(*DecipheredString)
  
  ;On ignore les premiers 0 de la chaine
  For N=1 To Len(Buffer)
    If Mid(Buffer,N,1) <> "0"
      Break
    EndIf
  Next
  
  ProcedureReturn Mid(Buffer,N)
EndProcedure


;Zone de test
Nombre = 1214567897
Result$ =  EncodeNombre(Nombre)  
Debug "le nombre "+Nombre+" codé donne " + Result$

;Verification
Debug "la chaine "+Result$+" correspond au nombre "+DecodeNombre(@Result$)  


DataSection
  Key:
    Data.b $06, $a9, $21, $40, $36, $b8, $a1, $5b, $51, $2e, $03, $d5, $34, $12, $00, $06

  InitializationVector:
    Data.b $3d, $af, $ba, $42, $9d, $9e, $b4, $30, $b4, $22, $da, $80, $2c, $9f, $ac, $41
EndDataSection
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Traduire une fonction VB en PB

Message par Micoute »

Merci falsam,

j'ai un problème, ça peut venir de ma version de PureBasic, mais ça me paraît curieux car ça me fait des ?????
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Répondre