Page 1 sur 2

Read Write XOR Encoded String - V2.0.0

Publié : dim. 12/juin/2011 2:19
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 <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<

Re: Read Write XOR Encoded String

Publié : dim. 12/juin/2011 10:24
par Ar-S
Merci pour ce partage, ça va surement servir.

Re: Read Write XOR Encoded String

Publié : dim. 12/juin/2011 18:41
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)

Re: Read Write XOR Encoded String

Publié : lun. 13/juin/2011 20:47
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 <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<

Re: Read Write XOR Encoded String - V2.0.0

Publié : ven. 10/févr./2012 18:14
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.

Re: Read Write XOR Encoded String - V2.0.0

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

Re: Read Write XOR Encoded String - V2.0.0

Publié : sam. 11/févr./2012 12:53
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:

Re: Read Write XOR Encoded String - V2.0.0

Publié : lun. 13/févr./2012 0:35
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 !

Re: Read Write XOR Encoded String - V2.0.0

Publié : lun. 13/févr./2012 9:47
par Ar-S
Un autre système de cryptage bienvenu.
Merci ;)

Re: Read Write XOR Encoded String - V2.0.0

Publié : lun. 13/févr./2012 16:04
par dayvid
cool, merci du partage Guimauve :)

Re: Read Write XOR Encoded String - V2.0.0

Publié : mar. 14/févr./2012 0:05
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

Re: Read Write XOR Encoded String - V2.0.0

Publié : mar. 14/févr./2012 11:21
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:

Re: Read Write XOR Encoded String - V2.0.0

Publié : mar. 14/févr./2012 12:44
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

Re: Read Write XOR Encoded String - V2.0.0

Publié : mar. 14/févr./2012 12:55
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 ;)

Re: Read Write XOR Encoded String - V2.0.0

Publié : mar. 14/févr./2012 14:11
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.