Read Write XOR Encoded String - V2.0.0

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Read Write XOR Encoded String - V2.0.0

Message par Guimauve »

Bonjour à tous,

Pas de quoi pour gagner un prix Nobel... Il s'agit simplement d'une micro librairie d'encodage de type XOR. Une version de Lecture et d'Écriture sur fichier binaire est également incluse.
Le code est compatible en mode Ascii et Unicode (En mode Unicode la chaîne encodé n'est pas lisible, possiblement que la valeur des caractères encodés sont trop grandes pour correspondre à des valeurs valides, cela ne gène en rien le fonctionnement.)

A+
Guimauve

Code : Tout sélectionner

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Nom du projet : Read/Write XOR Encoded String
; Nom du fichier : Read Write XOR Encoded String.pb
; Version du fichier : 1.0.0
; Programmation : OK
; Programmé par : Guimauve
; Date : 11-06-2011
; Mise à jour : 11-06-2011
; Code PureBasic : 4.60 Beta 3
; Plateforme : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Macro Looping(P_Number, P_Minimum, P_Maximum)
  
  P_Number = P_Number + 1
  
  If P_Number > P_Maximum
  
    P_Number = P_Minimum
    
  EndIf
 
EndMacro

Procedure.s XOREncodeString(Key.s, Text.s)

  KeyLength = Len(Key)
  TextLength = Len(Text)
  
  For Index = 1 To TextLength
    
    Looping(KeyIndex, 1, KeyLength)
    Encoded.s = Encoded + Chr(Asc(Mid(Text, Index, 1)) ! ~Asc(Mid(Key, KeyIndex, 1)))
    
  Next
  
  ProcedureReturn Encoded
EndProcedure

Procedure WriteXOREncodedString(FileID.l, Key.s, Text.s)

  KeyLength = Len(Key)
  TextLength = Len(Text)
  
  WriteLong(FileID, TextLength)
  
  For Index = 1 To TextLength
    
    Looping(KeyIndex, 1, KeyLength)
    WriteCharacter(FileID, Asc(Mid(Text, Index, 1)) ! ~Asc(Mid(Key, KeyIndex, 1)))
    
  Next

EndProcedure

Procedure.s ReadXOREncodedString(FileID.l, Key.s)

  KeyLength = Len(Key)
  TextLength = ReadLong(FileID)
  
  For Index = 1 To TextLength
    
    Looping(KeyIndex, 1, KeyLength)
    Encoded.s = Encoded + Chr(ReadCharacter(FileID) ! ~Asc(Mid(Key, KeyIndex, 1)))
    
  Next
  
  ProcedureReturn Encoded
EndProcedure

Key.s = "PureBasic 4.60 Beta 3"
Text.s = "J'aime les déesses nordiques super sexy !"

Encoded.s = XOREncodeString(Key, Text)
Decoded.s = XOREncodeString(Key, Encoded)

Debug "; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
Debug "; Essai sur chaîne de caractère"
Debug ""
Debug Text
Debug Encoded
Debug Decoded
Debug ""
Debug "; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
Debug "; Essai sur fichier"
Debug "Original : " + Text

If CreateFile(0, "Test.Enc")
  WriteXOREncodedString(0, Key, Text)
  CloseFile(0)
EndIf 

If ReadFile(1, "Test.Enc")
  Debug "Depuis le fichier : " + ReadXOREncodedString(1, Key)
  CloseFile(1)
  DeleteFile("Test.Enc")
EndIf 

; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
Dernière modification par Guimauve le mar. 14/juin/2011 2:05, modifié 1 fois.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Read Write XOR Encoded String

Message par Ar-S »

Merci pour ce partage, ça va surement servir.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Read Write XOR Encoded String

Message par Kwai chang caine »

Je ne sais pas si ça a un rapport avec l’opérateur XOR, c'est vrai on entend souvent ce nom de codage, apparemment c'est quelque chose souvent utilisé :roll:

Merci beaucoup GUIMAUVE pour ce partage. 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Read Write XOR Encoded String

Message par Guimauve »

Bonjour à tous,

Une nouvelle version qui est un peu plus solide au point de vue de l'encodage dans le sens où chacun des caractères du texte est traité par toute la clé. Il est certain que plus la clé est longue, plus l'encodage est long. Je donne ici la version 2.0.0 et je laisse la version 1.0.0 dans mon premier message.

De plus, pour éviter un problème avec une clé vide, la clé par défaut est "XOREncode", pas très original mais bon au moins cela fonctionne.

A+
Guimauve

Code : Tout sélectionner

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Nom du projet : Read/Write XOR Encoded String
; Nom du fichier : Read Write XOR Encoded String.pb
; Version du fichier : 2.0.0
; Programmation : OK
; Programmé par : Guimauve
; Date : 11-06-2011
; Mise à jour : 13-06-2011
; Code PureBasic : 4.60
; Plateforme : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Procedure.s XOREncodeString(Key.s, Text.s)
  
  If Key = ""
    Key = "XOREncode"
  EndIf 
  
  KeyLength = Len(Key)
  TextLength = Len(Text)
  
  For TextIndex = 1 To TextLength
    
    For KeyIndex = 1 To KeyLength
      Char.c = Asc(Mid(Text, TextIndex, 1)) ! ~Asc(Mid(Key, KeyIndex, 1))
    Next
    
    Encoded.s = Encoded + Chr(Char)
    
  Next
  
  ProcedureReturn Encoded
EndProcedure

Procedure WriteXOREncodedString(FileID.l, Key.s, Text.s)
  
  If Key = ""
    Key = "XOREncode"
  EndIf 
  
  KeyLength = Len(Key)
  TextLength = Len(Text)
  WriteLong(FileID, TextLength)
  
  For TextIndex = 1 To TextLength

    For KeyIndex = 1 To KeyLength
      Char.c = Asc(Mid(Text, TextIndex, 1)) ! ~Asc(Mid(Key, KeyIndex, 1))
    Next
    
    WriteCharacter(FileID, Char)
    
  Next
  
EndProcedure

Procedure.s ReadXOREncodedString(FileID.l, Key.s)
  
  If Key = ""
    Key = "XOREncode"
  EndIf 
  
  KeyLength = Len(Key)
  TextLength = ReadLong(FileID)
  
  For TextIndex = 1 To TextLength
    
    CharEncoded.c = ReadCharacter(FileID)
    
    For KeyIndex = 1 To KeyLength
      Char.c = CharEncoded ! ~Asc(Mid(Key, KeyIndex, 1))
    Next
    
    Encoded.s = Encoded + Chr(Char)
    
  Next  

  ProcedureReturn Encoded
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
; <<<<< !!! WARNING - YOU ARE NOW IN A TESTING ZONE - WARNING !!! <<<<< 
; <<<<< !!! WARNING - THIS CODE SHOULD BE COMMENTED - WARNING !!! <<<<< 
; <<<<< !!! WARNING - BEFORE THE FINAL COMPILATION. - WARNING !!! <<<<< 
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 

Key.s = "PureBasic 4.60 Beta 3"
Text.s = "J'aime les déesses nordiques super sexy !"

Encoded.s = XOREncodeString(Key, Text)
Decoded.s = XOREncodeString(Key, Encoded)

Debug "; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
Debug "; Essai sur chaine de caractère"
Debug ""
Debug Text
Debug Encoded
Debug Decoded

Debug ""
Debug "; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
Debug "; Essai sur fichier"
Debug "Texte Original : " + Text

If CreateFile(0, "Test.Enc")
  WriteXOREncodedString(0, Key, Text)
  CloseFile(0)
EndIf 

If ReadFile(1, "Test.Enc")
  Debug "Depuis le fichier : " + ReadXOREncodedString(1, Key)
  CloseFile(1)
  DeleteFile("Test.Enc")
EndIf 

; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Read Write XOR Encoded String - V2.0.0

Message par G-Rom »

Désolé du déterrage , mais j'avais pas envi de me claqué l'écriture de ces fonctions , merci du partage guimauve.
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Read Write XOR Encoded String - V2.0.0

Message par Guimauve »

Bonjour G-Rom,

Si je me souviens bien, mon code est basé sur celui-ci : http://www.purearea.net/pb/CodeArchiv/E ... &Decode.pb

Mais je l'ai tellement modifié que les deux codes ne ressemble plus.

A+
Guimauve
Avatar de l’utilisateur
Ulix
Messages : 315
Inscription : ven. 04/juin/2004 14:27
Localisation : Frontignan

Re: Read Write XOR Encoded String - V2.0.0

Message par Ulix »

Boujour a tous

Juste une petite question :

La ligne "Debug Encoded" ne devrait-elle pas afficher le texte encoder ?
Or dans mes essais, elle est en clair ? Pourquoi ? :oops:

Le code marche t-il vraiment ?
Je suis sous Linux, est-il multiplaformes ?

Merci d'avance :wink:
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Read Write XOR Encoded String - V2.0.0

Message par G-Rom »

on est tout les 3 sous linux alors , ici ca marche bien (x64) :
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Essai sur chaine de caractère

J'aime les déesses nordiques super sexy !
†ë­¥¡©ì ©¿ì?%©¿¿©¿ì¢£??¥?¹©¿ì¿¹?©?ì¿©?µìí
J'aime les déesses nordiques super sexy !

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Essai sur fichier
Texte Original : J'aime les déesses nordiques super sexy !
Depuis le fichier : J'aime les déesses nordiques super sexy !
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Read Write XOR Encoded String - V2.0.0

Message par Ar-S »

Un autre système de cryptage bienvenu.
Merci ;)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: Read Write XOR Encoded String - V2.0.0

Message par dayvid »

cool, merci du partage Guimauve :)
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Read Write XOR Encoded String - V2.0.0

Message par Guimauve »

Ar-S a écrit :Un autre système de cryptage bienvenu.
Merci ;)
Ce n'est pas un système de cryptage hyper solide. Il permet d’empêcher un bot qui voudrait récupérer des chaînes caractères bien précise.

@Ulix

Si je me souviens bien j'ai testé le code sous Windows XP et Linux Ubuntu x64 et LinuxMint 12 x64 sans problème. J'ai pas fait de test sous MacOSX puisque je n'ai pas de machine de ce type.

Mais je m'explique mal comment le code présenté ci-haut ne fonctionne pas chez toi. Alors que tout les autres indique que ça fonctionne. Est-ce que tu as modifié l'exemple par hasard ? Si oui montre le pour que l'on puisse comprendre ce qui ce passe.

A+
Guimauve
Avatar de l’utilisateur
Ulix
Messages : 315
Inscription : ven. 04/juin/2004 14:27
Localisation : Frontignan

Re: Read Write XOR Encoded String - V2.0.0

Message par Ulix »

@Guimauve

Salut !
J'ai trouvé d'où vient l'erreur ! (erreur si l'on veut :oops: )

Il s'agit d'une directive du compilateur, "option compilateur - Activer le support unicode".

Si l'option est activé, alors la ligne "Debug Encoded" est en clair, pas de codage du texte.

Fait le test, est dit moi si pour toi c'est aussi le cas, si la ligne "Debug Encoded" est en clair.



Je pense que pour que le codage soit complet, :idea:
il faut prendre en compte l'unicode, donc faire :

CompilerIf #PB_Compiler_Unicode
; Ici codage unicode
; a faire
CompilerElse
; Ici codage normal (ascii)
; codage existant
CompilerEndIf

Bref un truc de ce genre !

Merci d'avance :lol:
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Read Write XOR Encoded String - V2.0.0

Message par Guimauve »

Bonjour Ulix,

Chez moi avec le code présenté ci-haut avec :

Linux Mint 12 x64 + Gnome-Shell
PureBasic 4.61 Beta1 x64

Voici ce que le débogueur affiche en mode Ascii :
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Essai sur chaîne de caractères

J'aime les déesses nordiques super sexy !
†ë­¥¡©ì ©¿ì?%©¿¿©¿ì¢£??¥?¹©¿ì¿¹?©?ì¿©?µìí
J'aime les déesses nordiques super sexy !

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Essai sur fichier
Texte Original : J'aime les déesses nordiques super sexy !
Depuis le fichier : J'aime les déesses nordiques super sexy !
Et en mode Unicode :
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Essai sur chaîne de caractères

J'aime les déesses nordiques super sexy !

J'aime les déesses nordiques super sexy !

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Essai sur fichier
Texte Original : J'aime les déesses nordiques super sexy !
Depuis le fichier : J'aime les déesses nordiques super sexy !
Comme on peut le voir, le débogueur n'affiche plus rien et pourtant il retourne bien la chaîne décodée à partir de la chaîne encodée. C'est peut être dû au fait que l'Éditeur PureBasic soit compilé en mode Ascii. Si non, la chaîne "Encoded" est bien encodé dans les deux cas de figure (Ascii et Unicode).

A+
Guimauve
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Read Write XOR Encoded String - V2.0.0

Message par Backup »

C'est peut être dû au fait que l'Éditeur PureBasic soit compilé en mode Ascii. Si non, la chaîne "Encoded" est bien encodé dans les deux cas de figure (Ascii et Unicode).
je confirme ! :)

car avec EPB en mode unicode ou ascii (seven 64x compilation x86/x64)
[12 :54 :17] ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
[12 :54 :17] ; Essai sur chaine de caractère
[12 :54 :17]
[12 :54 :17] J'aime les déesses nordiques super sexy !
[12 :54 :17] ニ→ᆳᆬᄀᄅ↓ᅠᄅ﾿↓ᄄEᄅ﾿﾿ᄅ﾿↓ᄁᆪᄒᄄᆬᄑᄍᄅ﾿↓﾿ᄍᄐᄅᄒ↓﾿ᄅᄡᄉ↓■
[12 :54 :17] J'aime les déesses nordiques super sexy !
[12 :54 :17]
[12 :54 :17] ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
[12 :54 :17] ; Essai sur fichier
[12 :54 :17] Texte Original : J'aime les déesses nordiques super sexy !
[12 :54 :17] Depuis le fichier : J'aime les déesses nordiques super sexy !

ça marche :)

ps : ça marche aussi avec japbe ;)
Avatar de l’utilisateur
Ulix
Messages : 315
Inscription : ven. 04/juin/2004 14:27
Localisation : Frontignan

Re: Read Write XOR Encoded String - V2.0.0

Message par Ulix »

Merci a vous deux, Guimauve et Dobro de m'avoir éclaire :P

Je commençais a me poser des questions sur mon système Linux - Ubuntu :mrgreen:

Encore Merci !

@Dobro

Citation:
C'est peut être dû au fait que l'Éditeur PureBasic soit compilé en mode Ascii. Si non, la chaîne "Encoded" est bien encodé dans les deux cas de figure (Ascii et Unicode).

je confirme ! :)

car avec EPB en mode unicode ou ascii (seven 64x compilation x86/x64)
Apparement EPB, affiche sans problême le "debug Encoded" !

Je regrette de plus en plus qu'il ne soit qu'en version Windows. :cry:
EPB m'a l'air sacrement bon. Je l'envie en version Linux.

Merci.
Répondre