Page 3 sur 3

Re: Xor

Publié : ven. 07/sept./2012 17:50
par Backup
si j'ai bien compris (et SPH a raison ;) )

le probleme pour la formule suivante

Code : Tout sélectionner

r = c ! b
c'est lorsque c=b :)
forcement ça va sortir 0
le probleme c'est que ça va sortir 0 quelque soit la valeur des termes c ou b
s'ils sont egaux , c'est la mouise :)
parcequ'au decodage , on va tomber sur '0' , et on ne pourra pas retrouver le code d'origine :)

en effet ... qu'on fasse

255!255
52!52
65!65

les 3 seront egal a 0 ...

alors la question .. comment éviter qu'on se retrouve avec c=b ?? :

Code : Tout sélectionner

; peut etre un if
; bon allons y 
if c<>b
r = c ! b ; on encode seulement si c <> b  :o)
endif
mais alors qu’advient 'il si c=b ??
ben .. on ne le code pas ; on ecrit la valeur tel quel :)

et au decodage ,
il suffirai alors de tester aussi , si c<>b pour faire le Xor (le decodage )
sinon , on ecrit la valeur tel quel :)

voila la soluce ... :)

Re: Xor

Publié : ven. 07/sept./2012 18:01
par SPH
Voila ! Tu as su decrire ce que j'ai essayé d'expliquer sans y arriver. Mais j'ai eu tord dans mon raisonnement, je le reconnais... :oops:

Re: Xor

Publié : ven. 07/sept./2012 18:11
par Backup
au passage , le Xor est tres efficace avec des clef longue ... tres longue (la taille du fichier a encoder ) car ..

je vais prendre ici le fameux exemple des images X qui etaient données dans certains CD ROm de magasines de jeux Videos ..

il fallait appeler le 3615 code ... a X Francs la minutes ...pour avoir la clef de décodage pour chaque image ...

le probleme pour ces images Codé en XOR
c'est que les gars codaient avec une clef courte de quelques caracteres ..

or , Xor a une faiblesse connue que voici

Message en clair XOR Clef = Message Codé ... pour le moment tout vas bien .... sauf que ...

Message Codé XOR Message en clair = Clef !! :D ... excellent non ? :lol:


ce qui veux dire que , si on connais une partie du message en clair ... ce qui est le cas pour une image Jpg
son entete est sensiblement toujours pareil :)

il suffit de faire Image_codé XOR "FFD8FFE000104A46494600010100012C012C0000FF" (entete standard d'un jpg ) =====> le debut de la CLef (voir toute la clef .. ) apparait en clair !!

si la clef est moins longue que notre entete , on peut décoder toute l'image
car si la clef est courte cela veux dire qu'elle a été utilisé de façon repetitive sur toute l'image (le message ) codé ;)

donc Xor est efficace seulement si la clef est aussi longue que le fichier a encoder
et qu'on ne connais pas le type de message en clair .... :)

et bien sur ne pas utiliser un poeme celebre comme clef , car meme si on ne retrouve que quelques mots , la déduction de la clef sera facile :)

il existe meme des algo qui utilise les Statistiques d'apparition des caracteres dans un langue donné
pour prédire la clef ...

Re: Xor

Publié : ven. 07/sept./2012 18:30
par SPH
On en a meme fait des concours de decryptage ici meme si tu te rappelles... :mrgreen:

Re: Xor

Publié : ven. 07/sept./2012 18:34
par Backup
c'est mon grand age , qui me fait radoter :lol:

Re: Xor

Publié : ven. 07/sept./2012 19:57
par Golfy
SPH a écrit :
Golfy a écrit :
SPH a écrit :Je me suis gourré sur toute la ligne. Bon, alors je vais contourner le probleme (ca m'arrange pas) :cry:
Au lieu de présenter un algorithme en disant que ça ne marche pas, peux-tu expliquer la fonction que tu souhaites réaliser ?
Bon je rentre chez moi :roll:
C'est pour mon hypercrypttchat. Il bug dans un cas : quand les xor finissent par donner 0 (si tu n'as rien pigé, c'est pas grave, c'est technique)

Bon, je me fais tout petit, vous permettez ?
Alors en fait (comme la dit Dobro parce j'ai triché et lu le forum à l'envers) il faut éviter la valeur identique au deuxième terme de ton XOR.
Plutôt que de faire un test sur une valeur utilisé, ne peux-tu pas utiliser un terme improbable ?
Exemple : tu prends un mot de passe. Tu appliques dessus un codage de César (décalage de lettres) permettant de tomber : soit sur les codes < 32 (non affichable et utilisable dans un chat... mais gare au chr(10), chr(13)...) soit au-dessus des caractères que tu veux utiliser (cette fois, gare aux accents).

Ainsi en appliquant ton XOR sur ton message avec ta clé tu ne devrais pas tomber sur une valeur nulle...

Code : Tout sélectionner

; exemple by Golfy 2012-09
message$ = "azerty"
clef$="hello"
clefapplique$=""
messagecode$=""

; je 'code' la clé pour ne pas avoir de caractère que j'utilise dans mes messages
For t=1 To Len(clef$)
	clefapplique$+Chr(Val(Mid(clef$,t,1))+141)
Next t
Debug "["+clefapplique$+"]"

; je xorise mon message
x=1
For t=1 To Len(message$)
	messagecode$ + Chr(Asc(Mid(message$,t,1)) ! Asc(Mid(clefapplique$,x,1)))
	x+1
	If x>Len(clefapplique$)
		x=1
	EndIf
Next t
Debug "["+messagecode$+"]"
Et je ne suis pas faché mais comme me l'a appris un tuteur il y a presque vint ans : "quand tu cherches l'origine d'une erreur et que tu trouves une autre cause d'erreur, commence par corriger celle-ci même si elle n'a aucun rapport en apparence avec ton problème"

Espérant t'avoir aidé,
Golfy

PS: ton cryptochat bug sur la valeur NULLE ? est-ce parce que tu utilises des chaines de caractères ? les BASIC considèrent que le caractère NULL est le terminateur de la chaine. La solution : utiliser des MALLOC (dans une liste chainé avec une structure pour conserver la longueur)

Code : Tout sélectionner

;- Structures
Structure Vmsg
  Src.s
	Len.i
	*cmd
	Good.a
EndStructure


;- Variables
Global *BSin = AllocateMemory(4096)
Global NewList msg2velbus.Vmsg()

Re: Xor

Publié : ven. 07/sept./2012 20:54
par SPH
je vais reflechir. D'ailleurs, je devrais condamné les 13 premiers chr et pas seulement le 0...