procedure XOR

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

procedure XOR

Message par Zorro »

revision de ma procedure de XOR :)

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

Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: procedure XOR

Message par JohnJohnsonSHERMAN »

Joli... ca code bien aussi 8) Et en plus il n'y a qu'une seule procédure, fallait y penser (c'est un codage réversible en quelque sorte?).

Tiens dans le même genre un algo de codage en code de Vigenère (que j'ai fait en 15 min):

Code : Tout sélectionner

Declare Code()
Declare Decode()

OpenWindow(0,0,0,200,50,"Code de Vigenère",#PB_Window_Tool | #PB_Window_ScreenCentered)
ButtonGadget(1,10,10,80,35,"Coder")
ButtonGadget(2,110,10,80,35,"Décoder")

Repeat
  event=WaitWindowEvent()
  Select event
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 1
          Code()
          End
        Case 2
          Decode()
          End
      EndSelect
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver

      
Procedure Code()
  Define.s TexteCode,CharCle,CharClair,CharCode

Alphabet.s = "azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN,;:!?./§0123456789&é(-è_çà)=ù*$^%£² +\|[]#@"
TexteClair.s=InputRequester("Vigenere 1.0","Entrez le texte en clair à coder.","")
Cle.s=InputRequester("Vigenere 1.0","Entrez la clé de code.","",#PB_InputRequester_Password)
While Len(Cle) < Len(TexteClair)
  Cle=Cle+Cle
Wend

For i=1 To Len(TexteClair)
  CharClair = Mid(TexteClair,i,1)
  CharCle = Mid(Cle,i,1)
  PosCle = FindString(Alphabet,CharCle)
  PosClair = FindString(Alphabet,CharClair)
  PosCode = PosCle + PosClair
  If PosCode > Len(Alphabet)
    PosCode - Len(Alphabet)
  EndIf
  
  CharCode = Mid(Alphabet,PosCode,1)
  TexteCode = TexteCode + CharCode
Next
MessageRequester("Texte codé",TexteCode)
EndProcedure

Procedure Decode()
  Define.s TexteCode,CharCle,CharClair,CharCode,TexteClair

Alphabet.s = "azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN,;:!?./§0123456789&é(-è_çà)=ù*$^%£² +\|[]#@"
TexteCode=InputRequester("Vigenere 1.0","Entrez le texte codé.","")
Cle.s=InputRequester("Vigenere 1.0","Entrez la clé de code.","",#PB_InputRequester_Password)
While Len(Cle) < Len(TexteCode)
  Cle=Cle+Cle
Wend

For i=1 To Len(TexteCode)
  CharCode = Mid(TexteCode,i,1)
  CharCle = Mid(Cle,i,1)
  PosCle = FindString(Alphabet,CharCle)
  PosCode = FindString(Alphabet,CharCode)
  PosClair = PosCode - PosCle
  If PosClair < 0
    PosClair + Len(Alphabet)
  EndIf
  
  CharClair = Mid(Alphabet,PosClair,1)
  TexteClair = TexteClair + CharClair
Next
MessageRequester("Texte en clair",TexteClair)
EndProcedure
Exemple :
Texte en clair:

Code : Tout sélectionner

Le code de Vigenere est simple et pratique.
Clé : "Sherman"
Texte codé :

Code : Tout sélectionner

*j|;ZhE3luudrIDl|vczlXcEsdzl.l|xw+PWHs1
A noter qu'en Vigenére, si la clé est aussi longue ou plus longue que le texte à coder, le texte codé ne pourra pas être cracké ! 8) C'est toujours bon a savoir... (en pratique, sur un texte court, une clé égale aux 2/3 du texte a coder est largement suffisante).

Je réflechis aussi a un moyen de faire en sorte de faire d'une clé coutre (genre un mot) un clé aussi longue que le texte, sans pour autant qu'il n'y ait de répétition dans la clé... Dur dur
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: procedure XOR

Message par Zorro »

A noter qu'en Vigenére, si la clé est aussi longue ou plus longue que le texte à coder, le texte codé ne pourra pas être cracké
l'attaque par statistique , semble pouvoir faire tomber un Vigenére ,

par contre pas le XOR ( a condition qu'il soit bien utilisé ) , il ne fait pas appel a une table ....
pour le XOR , je dirai a la seule condition que le pass soit aussi long que le truc a encoder !!
pas faire l'erreur des magasines info (j'ai oublié le nom) qui proposaient sur un CD rom des images x , ils encodaient ces images X en encodant seulement avec un pass de la longueur de l'entete des images repeté tout au long du fichier !!
probleme, les octets de l'entete des images Jpg est connu comme le loup blanc

or le XOR a un leger probleme :

A XOR passw = Crypté

mais ....
A XOR Crypté = Passw :)

comme on connaissait A (les octets de l'entete jpg , c'etait facile de faire apparaitre le pass , au lieu d'appeler le 3615 code xxxx a pleins de sous la minutes :lol:

JohnJohnsonSHERMAN a écrit : Je réflechis aussi a un moyen de faire en sorte de faire d'une clé courte (genre un mot) un clé aussi longue que le texte, sans pour autant qu'il n'y ait de répétition dans la clé... Dur dur
non non :) (j'adore jouer avec les lettres )

Code : Tout sélectionner

Declare.s rallonge_password(pass.s,longueur_pass)
longueur_pass=23 ; la longueur voulue ... par exemple la longueur du text a encrypter
pass.s="Soleil" ; le mot de pass visiblement trop court 
debug rallonge_password(pass.s,longueur_pass) ; la procedure qui va rallonger le mot de pass de la longeur voulue, avec les lettres du mot de pass prises au hasard

Procedure.s rallonge_password(pass.s,longueur_pass)
		; By Zorro
		Protected passwrd.s,long
		RandomSeed(8) ; <<<< ceci pour etre sur qu'avec un mot de pass precis, on est toujours le meme résultat une fois rallongé !! (pour le decodage c'est mieux LOL )
		; par exemple avec le pass "Soleil" et la longueur 23 on aura toujours ceci de genréré : "SoleilieoeSeiolollilieS"  :o)
		long= len(pass.s)-1
		if longueur_pass <long
				MessageRequester("erreur", "la longueur  demandée,doit etre superieur a la longueur du mot de pass")
				; note qu'on aurai pu reduire le mot de pass dans ce cas avec un simple
				;if longueur_pass<1:longueur_pass=1:endif
				;pass.s=left(pass.s,longueur_pass)
				ProcedureReturn "erreur"
		Endif
		If long<longueur_pass				
				manque=(longueur_pass-long)-1
				passwrd.s=pass.s
				For y= 1 to manque
						pos=random(long,1)						
						passwrd.s=passwrd.s+mid(pass.s,pos,1)					
				Next y
				ProcedureReturn passwrd.s
		Else
				ProcedureReturn pass.s
		Endif
EndProcedure
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: procedure XOR

Message par Kwai chang caine »

Cool ces modes de cryptage, jamais entendu parler du "vigneron" 8)
Par contre le XOR on voit ça de partout....alors je me dit que ce doit être éfficace
Merci à vous deux du partage 8)
au lieu d'appeler le 3615 code xxxx a pleins de sous la minutes
Bah je comprend pas...moi j'ai jamais eu à payer quoi que ce soit pour regarder des belles images de filles dans mon lit 8O

Image
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: procedure XOR

Message par Zorro »

Image

j'ai bien ris , merci Image


bonne explication ici :
http://www.dcode.fr/chiffre-vigenere#q1
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: procedure XOR

Message par JohnJohnsonSHERMAN »

Dobro a écrit :l'attaque par statistique , semble pouvoir faire tomber un Vigenére ,
L'attaque par statistique repose justement sur la répétition de la clé, et vise a trouver un motif régulier dans le texte pour tenter de connaitre la longueur de la clé. Une fois la longueur de la clé connue, on segmente le texte en morceaux de la longueur de cette clé, et on procéde par analyse de fréquences. C'est la méthode du Test de Kasiski. Le fait d'avoir une clé aussi longue que le texte rend impossible sa répétition 8) , et donc le décryptage par cette méthode. L'inconvénient reste la répétition de cette clé, sur de longs textes (remarque sur un long texte ou peut aussi le coder avec une longue clé, genre le dico ou la Bible, mais dans ce cas faut aussi que le correspondant posséde un de ces ouvrages et sache sur quelles pages se trouve la clé...). Article de Wiki trés intéressant sur le code de Vigenère. (en bas de page, Chiffre de Vernam, vous verrez bien... :mrgreen: )

Pas mal ton répétiteur de clé Dobro, merci !
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: procedure XOR

Message par Zorro »

Le fait d'avoir une clé aussi longue que le texte rend impossible sa répétition 8) , et donc le décryptage par cette méthode.
oui j'ai lu ça apres avoir ecrit :)
du coup j'ai fait ma propre procedure Vigenere, avec rallongeur de password :)
j'ai inclu le tout dans mon EPB

avant la methode de codage que j'utilisai etait trop simple , un simple decalage d'une lettre (methode Romaine :) )
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: procedure XOR

Message par JohnJohnsonSHERMAN »

Méthode romaine : le code César :mrgreen: :mrgreen: Environ quelques minutes d'éspérance de vie....

Au fait, l'idée de rallonger le pass, ca vient de :idea: Un Sherman :idea: , donc ce sera 999.99€ pour le copyright... :mrgreen: :mrgreen:
(c) JohnJohnsonSherman, 2016. Patent no : 5953652. 8)
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: procedure XOR

Message par Zorro »

JohnJohnsonSHERMAN a écrit :Méthode romaine : le code César :mrgreen: :mrgreen: Environ quelques minutes d'éspérance de vie....

Au fait, l'idée de rallonger le pass, ca vient de :idea: Un Sherman :idea: , donc ce sera 999.99€ pour le copyright... :mrgreen: :mrgreen:
(c) JohnJohnsonSherman, 2016. Patent no : 5953652. 8)
qui te dis, que ma procedure n'est pas anterieur a l'ecriture de ton idée sur le forum ?? :mrgreen:

que dalle ! t'aura que dalle ! :lol:
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: procedure XOR

Message par JohnJohnsonSHERMAN »

Qui te dis que l'apparition de mon idée dans mon cerveau n'est pas antérieure a son écriture sur le forum??
Un optimiste a écrit :que dalle ! t'aura que dalle ! :lol:
J'aurais TOUTE ta fortune, je te ferais des procés, et tu finiras tout moisi en tole :mrgreen: :mrgreen:
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: procedure XOR

Message par Ar-S »

Et qui te dit que l'apparition de cette idée dans ton cerveau n'est pas le fruit de ma puissance cérébrale aidée de mon pote Charles Xavier et du Cerebro ? :mrgreen:
~~~~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
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: procedure XOR

Message par JohnJohnsonSHERMAN »

Tout simplement : Charles Xavier est controlé par mon cerveau... et ma puissance vient des illuminati et aussi un peu d'une réincarnation de Staline dans une tasse de café, mélangé a un zeste de café fabriqué par Napoléon lui même quand il a conquis la polynésie avec des Panzers bleus... C'est tout simple non? :mrgreen: :mrgreen: :mrgreen:
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: procedure XOR

Message par Zorro »

JohnJohnsonSHERMAN a écrit : par Napoléon lui même quand il a conquis la polynésie
ha? il a fait ça napo Leon ?
je croyais que c'etait Cook ...puis bougainville .. :)
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: procedure XOR

Message par Kwai chang caine »

Put...alors là.....on a quitté le niveau de Récré A2, on est carrément chez POLAC à 2h du mat 8O
Vos explications et la cryptographie en général ne m'a jamais laissé de glace....
Je pourrais même dire, qu'en lisant ce genre d'explications, je "Crie au génie" (Putain celle là.. je la note) :mrgreen:

@Qui s'en va hors de la nuit
http://www.dcode.fr
Cool ce lien, justement une fois j'avais visité ce genre de site, ou peut etre carrément celui la, et j'etais tombé sur le cul de la complexité et des tronches de ces mecs 8O
Moi aussi il y a une dizaine d'année, j'ai créé des clefs de cryptage perso, avec mon niveau en math de 4e :oops:
J'ai opté pour le mélange des methodes (Inversion de phrase, complementation decimale, etc...) et créé plusieurs clefs de cryptage dont je me sert tous les jours pour bloquer mes giciels.
Mais un jour, le geek de mon boulot, m'a dit que j'avais tout faux, car la premiere chose à faire, c'est de deplacer les caracteres du début, c'est à dire que le A ne soit pas à sa place etc...sinon le cryptage est facile à trouver ...

J'étais fier comme bar tabac, et du coup ce p'tit con, il m'a fait débandé en quelques secondes...
Je hais les jeunes geeks !!!!!! :?
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: procedure XOR

Message par JohnJohnsonSHERMAN »

Moi a écrit :Tout simplement : Charles Xavier est controlé par mon cerveau... et ma puissance vient des illuminati et aussi un peu d'une réincarnation de Staline dans une tasse de café, mélangé a un zeste de café fabriqué par Napoléon lui même quand il a conquis la polynésie avec des Panzers bleus... C'est tout simple non? :mrgreen: :mrgreen: :mrgreen:
Zorro (qui apprend son histoire de France) a écrit : ha? il a fait ça napo Leon ?
je croyais que c'etait Cook ...puis bougainville .. :)
Ben oui : la preuve par l'image : (prise sur l'Iphone du Général Troudukoët, second de Napoléon)
Image

On y voit bien le Panzer bleu de l'Empeureur :mrgreen: :mrgreen:
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Répondre