cryptage text code php => pb

Programmation d'applications complexes
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

cryptage text code php => pb

Message par Thyphoon »

Bon j'ai un sérieux problème...ça fait des heures que j'essaie de convertire ce code php en purebasic sans y arriver
si quelqu'un y arrive qu'il me fasse signe...
c'est pourtant pas compliqué quand même Grrrrrrrrrrrrr bon aller je recommence une nouvelle fois depuis le debut avant de laisse tomber ...

Code : Tout sélectionner

function GenerationCle($Texte,$CleDEncryptage)
  {
  $CleDEncryptage = md5($CleDEncryptage);
  $Compteur=0;
  $VariableTemp = "";
  for ($Ctr=0;$Ctr<strlen($Texte);$Ctr++)
    {
    if ($Compteur==strlen($CleDEncryptage))
      $Compteur=0;
    $VariableTemp.= substr($Texte,$Ctr,1) ^ substr($CleDEncryptage,$Compteur,1);
    $Compteur++;
    }
  return $VariableTemp;
  }

function Crypte($Texte,$Cle)
  {
  srand((double)microtime()*1000000);
  $CleDEncryptage = md5(rand(0,32000) );
  $Compteur=0;
  $VariableTemp = "";
  for ($Ctr=0;$Ctr<strlen($Texte);$Ctr++)
    {
    if ($Compteur==strlen($CleDEncryptage))
      $Compteur=0;
    $VariableTemp.= substr($CleDEncryptage,$Compteur,1).(substr($Texte,$Ctr,1) ^ substr($CleDEncryptage,$Compteur,1) );
    $Compteur++;
    }
  return base64_encode(GenerationCle($VariableTemp,$Cle) );
  }

function Decrypte($Texte,$Cle)
  {
  $Texte = GenerationCle(base64_decode($Texte),$Cle);
  $VariableTemp = "";
  for ($Ctr=0;$Ctr<strlen($Texte);$Ctr++)
    {
    $md5 = substr($Texte,$Ctr,1);
    $Ctr++;
    $VariableTemp.= (substr($Texte,$Ctr,1) ^ $md5);
    }
  return $VariableTemp;
  }
//Exemple de l'appel aux fonctions Crypte et Decrypte :

$Cle = "MotDePasseSuperSecret";
$MonTexte = "Mon numéro de carte de crédit est le 445.32.443.12";
$TexteCrypte = Crypte($MonTexte,$Cle);
$TexteClair = Decrypte($TexteCrypte,$Cle);
echo "Texte original : $MonTexte <Br>";
echo "Texte crypté : $TexteCrypte <Br>";
echo "Texte décrypté : $TexteClair <Br>";
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

je venais voir les nouvelles et je remarque je ne vous ai mis que le code d'origine et pas ma version purebasic (qui marche toujours pas)
Si vous trouvez l'erreur n'hésitez pas...moi je vais peut être aller me coucher...2h20 c'est une heure tout a faire raisonnables ! :P

Code : Tout sélectionner

Procedure.s XorString(a.s,b.s)
  ProcedureReturn Chr(Asc(a) ! Asc(b))
EndProcedure

Procedure.s GenerationCle(Texte.s,CleDEncryptage.s)
  CleDEncryptage = MD5Fingerprint(@CleDEncryptage,Len(CleDEncryptage));
  Compteur.l=0;
  VariableTemp.s = "";
  For Ctr=0 To Len(Texte)-1
    If (Compteur=Len(CleDEncryptage))
      Compteur=0;
    EndIf
    VariableTemp=VariableTemp + XorString(Mid(Texte,Ctr,1),Mid(CleDEncryptage,Compteur,1));
    
    
    Compteur=Compteur+1
  Next
  ProcedureReturn VariableTemp;
EndProcedure

Procedure.s Crypte(Texte.s,Cle.s)
  ;srand((double)microtime()*1000000);
  rand.s=Str(Random(32000))
  CleDEncryptage.s = MD5Fingerprint(@rand, Len(rand))
  Compteur=0;
  VariableTemp.s = "";
  For Ctr=0 To Len(Texte)-1
    If (Compteur=Len(CleDEncryptage))
      Compteur=0;
    EndIf
    VariableTemp= VariableTemp+Mid(CleDEncryptage,Compteur,1)+XorString(Mid(Texte,Ctr,1),Mid(CleDEncryptage,Compteur,1));
    Compteur=Compteur+1
  Next
  ResultCle.s=GenerationCle(VariableTemp,Cle)
  res.s=Space(1024)
  Base64Encoder(@ResultCle, Len(ResultCle), @res, 1024)
  ProcedureReturn res
EndProcedure

Procedure.s Decrypte(Texte.s,Cle.s)
  res.s=Space(1024)
  Base64Decoder(@Texte,Len(Texte), @res, 1024)
  Texte.s=GenerationCle(res,Cle)
  VariableTemp.s = "";
  For Ctr=0 To Len(Texte)-1
    
    md5.s = Mid(Texte,Ctr,1);
    Ctr=Ctr+1;
    VariableTemp=VariableTemp+(XorString(Mid(Texte,Ctr,1),md5));
  Next
  ProcedureReturn VariableTemp;
EndProcedure
;Exemple de l'appel aux fonctions Crypte et Decrypte :

Cle.s = "MotDePasseSuperSecret";
MonTexte.s = "Mon numéro de carte de crédit est le 445.32.443.12";
TexteCrypte.s = Crypte(MonTexte,Cle);
TexteClair.s = Decrypte(TexteCrypte,Cle);
Debug "Texte original :"+MonTexte
Debug "Texte crypté :"+TexteCrypte
Debug "Texte décrypté :"+TexteClair
Avatar de l’utilisateur
venom
Messages : 3128
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

ah ! ok
tu me l'aurait mis tout de suite en purebasic j'aurai compris ce que tu souhaité faire :wink:
si sa peut t'aidé j'avais lancer ce genre de projet une fois tien :wink: :

Code : Tout sélectionner

;- Window Constants
Enumeration
  #String_2
EndEnumeration

;- Gadget Constants
Enumeration
  #Frame3D_0
  #Frame3D_1
  #Text_0
  #Text_1
  #Text_2
  #String_0
  #String_1
  #String_3
  #Button_0
  #Button_1
EndEnumeration

  If OpenWindow(#String_2, 0, 0, 210, 295, "generateur",  #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
    If CreateGadgetList(WindowID(#String_2))
      Frame3DGadget(#Frame3D_0, 10, 10, 190, 160, "")
      Frame3DGadget(#Frame3D_1, 10, 180, 190, 105, "")
      TextGadget(#Text_0, 60, 20, 80, 20, "Nom / Prénom :")
      TextGadget(#Text_1, 80, 110, 45, 20, "Resultat:")
      TextGadget(#Text_2, 20, 195, 170, 15, "tester le code :", #PB_Text_Center)
      StringGadget(#String_0, 30, 45, 150, 20, Texte$)
      StringGadget(#String_1, 30, 135, 150, 20, "", #PB_String_ReadOnly)
      StringGadget(#String_3, 20, 220, 170, 20, "", #PB_String_Numeric)
      ButtonGadget(#Button_0, 55, 75, 100, 25, "Generer un code")
      ButtonGadget(#Button_1, 55, 250, 100, 25, "tester")
      
    EndIf
  EndIf

  Repeat
   EventID = WaitWindowEvent()
    If EventID = #PB_Event_Gadget 
      Select EventGadget()

       Case #Button_0
        Texte$ = GetGadgetText(#String_0)
        Valeur$=""
        For i = 1 To Len(Texte$)
          Valeur$ = Valeur$ + Str(Asc(Mid(Texte$,i,1)))+" "
        Next
        SetGadgetText(#String_1, Valeur$)
       
       Case #Button_1
        Texte$ = GetGadgetText(#String_3)
         Valeur$=""
        For i=1 To Len(texte$)
         Resultat$ = StringField(texte$, i, " ")
          Valeur$=Valeur$+Chr(Val(Resultat$))
        Next i
         MessageRequester("", Valeur$, 0)
         
      EndSelect
    EndIf
  Until EventID = #PB_Event_CloseWindow
dit moi si sa peut t'aidé.




@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Anonyme

Message par Anonyme »

y a des erreurs dans tes boucles :

l'utilsation de la fct° Mid() est incorecte :

Code : Tout sélectionner

T$ = "SHYPHOON"

; ERREUR
For i = 0 To Len(T$)-1
  R$+ Mid(T$,i,1)
Next 
Debug R$
R$=""

;CORRECT
For i = 1 To Len(T$)
  R$+ Mid(T$,i,1)
Next 
Debug R$
je ne sais pas si c'est une erreur , mais dans une de tes boucles for-next
tu modifie littérateur (ds la fct° Decrypte() ) :

Code : Tout sélectionner

For Crt = 0 To 10
  Crt = Crt + 1
  Debug Crt
Next  
Anonyme

Message par Anonyme »

voila un code qui fonctionne :

Code : Tout sélectionner

Structure OneByte
  a.b
EndStructure 

Procedure.s XorString(a.s,b.s)
  ProcedureReturn Chr(Asc(a) ! Asc(b))
EndProcedure 

Procedure.l Bin2Dec(BinaryStringNumber.s)
  *t.OneByte = @BinaryStringNumber
  Result.l = 0
  While *t\a <> 0
    Result = (Result << 1) + (*t\a - 48)
    *t + 1
  Wend
  ProcedureReturn Result
EndProcedure 

Procedure.s GenerateKey(Bit)

For i = 1 To Bit
  Key$ + Str(Random(1))
Next 

For i = 0 To Len(Key$) Step 4
 R$ + Hex(Bin2Dec(Mid(Key$,i,4)))
Next 

ProcedureReturn R$
EndProcedure

Procedure.s CrypteText(Texte.s,Cle.s)

Cnt=1
For i = 1 To Len(Texte)

If Cnt>Len(Cle) : cnt=1 : EndIf 
  Char$ = Mid(Texte,i,1)
  KeyChunk$ = Mid(Cle,Cnt,1)
  R$ + XorString(Char$,KeyChunk$)
  Cnt+1
Next 

ProcedureReturn R$
EndProcedure


Procedure.s Decrypte(Texte.s,Cle.s)
Cnt=1
For i = 1 To Len(Texte)
    If Cnt>Len(Cle) : cnt=1 : EndIf 
      Char$ = Mid(Texte,i,1)
      KeyChunk$ = Mid(Cle,Cnt,1)
      R$ + XorString(KeyChunk$,Char$)
      Cnt+1
    Next 

ProcedureReturn R$
EndProcedure

Txt$ = "Ce texte est complétement bidon , il sert a être crypté puis décrypté , tout cela pour voir si cela fonctionne correctement"





Key$ = GenerateKey(100)

TexteCrypter$   = CrypteText(Txt$,Key$)
TexteDeCrypter$ = Decrypte(TexteCrypter$,key$)

Debug "Texte clair = " + Txt$
Debug "Texte codé = " + TexteCrypter$
Debug "Texte décodé = " + TexteDeCrypter$
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Merci a tous !
Cpl.bator est le grand gagnant. Juste un truc curieux, la première fois que j'ai fait tourner ton code ça ne me l'a pas décoder correctement...et puis ensuite ça été bon a chaque fois ...
En tout cas tu as réussi là ou j'ai passé une nuit blanche sans avoir un résultat vraiment probant. chapeau pas !

@Venom : Oui merci j'avais suivi ton topic ! L'idée était intéressante mais j'avais besoin de que quelques choses qui une fois crypter puisse donner a chaque fois quelques choses de différent !!
Lna
Messages : 181
Inscription : mar. 21/juin/2005 11:11

Message par Lna »

Thyphoon, le truc curieux correspond à la tentative de stockage d'un Chr(0), à cause d'un Xor de 2 caractères identiques dans un String. 8O

Code : Tout sélectionner

Structure OneByte 
  a.b 
EndStructure 

Procedure.s XorString(a.s,b.s) 
  ProcedureReturn Chr(Asc(a) ! Asc(b)) 
EndProcedure 

Procedure.l Bin2Dec(BinaryStringNumber.s) 
  *t.OneByte = @BinaryStringNumber 
  Result.l = 0 
  While *t\a <> 0 
    Result = (Result << 1) + (*t\a - 48) 
    *t + 1 
  Wend 
  ProcedureReturn Result 
EndProcedure 

Procedure.s GenerateKey(Bit) 
  
  For i = 1 To Bit 
    Key$ + Str(Random(1)) 
  Next 
  
  For i = 0 To Len(Key$) Step 4 
    R$ + Hex(Bin2Dec(Mid(Key$,i,4))) 
  Next 
  
  ProcedureReturn R$ 
EndProcedure 

Procedure.s CrypteText(Texte.s,Cle.s) 
  
  Cnt=1 
  For i = 1 To Len(Texte) 
    
    If Cnt>Len(Cle) : cnt=1 : EndIf 
    Char$ = Mid(Texte,i,1) 
    KeyChunk$ = Mid(Cle,Cnt,1) 
    
    IF Char$=KeyChunk$
      Debug "Erreur CrypteText "+Char$+" "+KeyChunk$+" "+Str(Asc(XorString(Char$,KeyChunk$))) ; Test erreur CrypteText
    Endif
    
    R$ + XorString(Char$,KeyChunk$) 
    Cnt+1 
  Next 
  
  ProcedureReturn R$ 
EndProcedure 


Procedure.s Decrypte(Texte.s,Cle.s) 
  Cnt=1 
  For i = 1 To Len(Texte) 
    If Cnt>Len(Cle) : cnt=1 : EndIf 
    Char$ = Mid(Texte,i,1) 
    KeyChunk$ = Mid(Cle,Cnt,1) 
    R$ + XorString(KeyChunk$,Char$) 
    Cnt+1 
  Next 
  
  ProcedureReturn R$ 
EndProcedure 

Txt$ = "Ce texte est complétement bidon , il sert a être crypté puis décrypté , tout cela pour voir si cela fonctionne correctement" 

For Cnt=1 To 200
  
  Key$ = GenerateKey(100) 
  
  TexteCrypter$   = CrypteText(Txt$,Key$) 
  TexteDeCrypter$ = Decrypte(TexteCrypter$,key$) 
  
  IF TexteDeCrypter$<>txt$
    Debug Str(Cnt)+" Texte décodé pas bon = " + TexteDeCrypter$
    Break
  Else
    Debug Str(Cnt)+" Texte décodé bon = " + TexteDeCrypter$
    
  Endif
  
Next Cnt

Debug "Texte clair = " + Txt$ 
Debug "Texte codé = " + TexteCrypter$ 
Debug "Texte décodé = " + TexteDeCrypter$

Debug Len(txt$)
Debug Len(TexteDeCrypter$)

Tu peux utiliser un tableau.b ou un Allocatememory pour le stockage binaire. :idea:

Mais si tu aimes mieux les strings, rien ne t'empêche de renouveller Decrypte(Texte.s,Cle.s) à chaque caractère identique rencontré, si le texte n'est pas trop grand. :wink:

@ peluche
Anonyme

Message par Anonyme »

Mais si tu aimes mieux les strings


Oui !!! :D
On veut te voir en string ! :D Fait pété la photo :D
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Lna a écrit :Thyphoon, le truc curieux correspond à la tentative de stockage d'un Chr(0), à cause d'un Xor de 2 caractères identiques dans un String. 8O
Oui j'ai compris ça hier soir en reprenant tout de zero, mais j'ai été coupé car hier soir c'était notre anniversaire de Mariage avec ma femme et on est sortie .. je n'ai pu m'y remettre que ce matin. Je te remercie en tout cas pour ton code ça confirme mon analyse
Cpl.Bator a écrit :
Mais si tu aimes mieux les strings


Oui !!! :D
On veut te voir en string ! :D Fait pété la photo :D
lollllllllll
Peut être que si tu met une photo de toi en string avant, Elle voudra bien :P
(mais bon previent avant histoire qu'on ne soit pas coquer en tombant sur ta photo) lollllll :lol:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Cpl.Bator a écrit :Oui !!! :D
On veut te voir en string ! :D Fait pété la photo :D
heu ! non! non! :?
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

heu ! non! non!
Ah ba v'la aut'chose, Pourquoi non non 8O
Je n'aurais jamais osé le demander, je la respecte trop pour ça, mais j'suis un peu de l'avis de CPL, si un jour ça lui dit, il faut surtout pas qu'elle se retienne :D
Et puis apres tout on est tous de la meme famille, y'a pas d'mal à voir le string de sa soeur :D
Si les dieux ont mis autant de beauté dans les femmes, c'est peut etre bien pour qu'on les admire, non ? :roll:

A moins que tu préfere voir le miens :lol:
Avatar de l’utilisateur
Le psychopathe
Messages : 764
Inscription : jeu. 03/mars/2005 19:23

Message par Le psychopathe »

Kwai chang caine a écrit :
heu ! non! non!
Et puis apres tout on est tous de la meme famille
Heu... non 8) Et je matte pas les femmes de ma famille et encore moins ma soeur lol...
Chacun son trip après tout mdr Il faut de tout pour faire un monde.
Répondre