Page 1 sur 1

cryptage text code php => pb

Publié : mer. 13/févr./2008 21:44
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>";

Publié : jeu. 14/févr./2008 2:19
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

Publié : jeu. 14/févr./2008 6:54
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é.




@++

Publié : jeu. 14/févr./2008 10:20
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  

Publié : jeu. 14/févr./2008 11:05
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$

Publié : jeu. 14/févr./2008 11:21
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 !!

Publié : ven. 15/févr./2008 10:08
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

Publié : ven. 15/févr./2008 10:47
par Anonyme
Mais si tu aimes mieux les strings


Oui !!! :D
On veut te voir en string ! :D Fait pété la photo :D

Publié : ven. 15/févr./2008 10:57
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:

Publié : ven. 15/févr./2008 13:04
par Backup
Cpl.Bator a écrit :Oui !!! :D
On veut te voir en string ! :D Fait pété la photo :D
heu ! non! non! :?

Publié : ven. 15/févr./2008 16:27
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:

Publié : mer. 20/févr./2008 13:47
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.