Code : Tout sélectionner
;***********************************************
;Titre :*codec_xor_xor_procedure
;Auteur : Zorro
;Date :02/08/2016
;Heure :16:03:24
;Version Purebasic : PureBasic 5.50 (Windows - x86)
;Version de l'editeur :EPB V2.64
; Libairies necessaire : Aucune
;***********************************************
Declare.s codec_xor(sortie$, password.s)
; ***************** l'encodeur qui peut etre un prg a part que tu garde pour toi *********************
textacoder$="les Potirons sont ronds" ; le mot a coder
Password$="Le soleil brille" ; le mot de pass
Debug "le Password est :" +Password$
Debug "le mot avant codage :"+textacoder$ ; avant codage
;
coder$=codec_xor(textacoder$,Password$) ; on code le text avec la librairie
;
Debug "le mot codé : "+coder$ ; apres codage
; **************************************************************************************
; ********************le decodeur a mettre dans ton code (avec la procedure) *****************************
decoder$=codec_xor(coder$,"Le soleil brille") ; on decode le text encodé avec la librairie
Debug "voici le mot decodé par la procedure : "+decoder$ ; apres décodage
;- *** Zone Procedures
Procedure.s codec_xor(sortie$, Password.s)
;by Dobro (Zorro)
; Code Xor simple
Text.s=sortie$
Password.s=UCase(Password.s)
P=0
long_or = Len(Text.s)
long_pass = Len(Password.s)
For i=1 To long_or
P=P+1 : If P= long_pass:P=1:EndIf ; fait tourner le mot de pass
car_pass.l=Asc( Mid(Password.s, P, 1)) ; recupere une lettre (son code ascii)du mot de pass
car_text.l= Asc(Mid(Text.s, i, 1)) ; recupere une lettre (son code ascii) du text a coder
If car_text.l=car_pass.l ; le caractere du text et le caractere du passwrd sont pareille !!
car_text.l=255 ; pour eviter de se retrouver avec un zero , on remplace le caractere du text par 255 !
sorti.l=car_text.l;et on prends le code 255 a la place du caractere !!
text_sorti.s=text_sorti.s+Chr(sorti) ; on l'ajoute a la chaine de sortie
Flag_xor=1 ; ce flag nous permet d'eviter une section de code plus bas (evite un Goto )
ElseIF car_text.l=255 ; la on tombe sur le caractere special 255 , qui nous indique qu'il faut remplacer celui ci par la lettre du mot de pass
car_text.l=car_pass.l ; c'est ce qu'on fait ici
sorti.l=car_text.l;
text_sorti.s=text_sorti.s+Chr(sorti) ; on l'ajoute
Flag_xor=1 ; ; ce flag nous permet d'eviter une section de code plus bas (evite un Goto )
EndIf
if Flag_xor=0 ; la fameuse partie de code a eviter en cas de caractere special (lettre du message = lettre du mot de pass)
sorti.l= car_pass ! car_text ; un petit XOR .... ici on fait un Xor simple sans avoir a bidouiller .... les caracteres message et mot de pass sont different
text_sorti.s=text_sorti.s+Chr(sorti) ; on ajoute notre resultat a la chaine de sortie
Endif
Flag_xor=0 ; on remet le flag a zero au cas ou ...
Next i ; on continu au caractere suivant :o)
Text.s= text_sorti.s
text_sorti.s=""
ProcedureReturn Text.s ; renvoi le resultat de notre opération
EndProcedure