chiffrer un message de manière amusante en Xor

Eléphant du PHP | 52 Messages

01 janv. 2012, 19:05

Voilà, j'ai écrit une simple ligne pour chiffrer un message avec la fonction Xor :

Mais j'ai fait en sorte que chaque lettre donne un résultat différent à chaque fois, sinon c'est trop facile à déchiffrer.
Voilà, critiques, remarques et améliorations bienvenues. Si ça peut aider un débutant... :)

Code : Tout sélectionner

$texte="aaabcdeee"; $j=1;for($i=0;$i<strlen($texte);$i++){$mess_chiffre.= chr(ord($texte[$i])^($j*3));$j++;if($j==9){$j=1;};} echo $mess_chiffre;
Le résultat est pour la chaîne aaabcdeee est : bghnlvp}f

a donne b
a donne g
a donne h
b donne n
c donne l
d donne v
e donne p
e donne }
e donne f
Modifié en dernier par Jim125 le 01 janv. 2012, 19:44, modifié 3 fois.

Eléphant du PHP | 52 Messages

01 janv. 2012, 19:07

Le déchiffreur :

Code : Tout sélectionner

$texte="SRUWUS]\_"; $j=1;for($i=0;$i<strlen($texte);$i++){$mess_dechiffre.= chr(ord($texte[$i])^($j*3));$j++;if($j==9){$j=1;};} echo $mess_dechiffre;

Mammouth du PHP | 2278 Messages

01 janv. 2012, 20:16

[quote="Jim125"]Voilà, j'ai écrit une simple ligne pour chiffrer un message avec la fonction Xor :

Mais j'ai fait en sorte que chaque lettre donne un résultat différent à chaque fois, sinon c'est trop facile à déchiffrer.
Voilà, critiques, remarques et améliorations bienvenues. Si ça peut aider un débutant... :)

Code : Tout sélectionner

$mess_chiffre .= chr(ord($texte[$i])^($j*3));
Il serait bon de préciser que ^ est un opérateur sur les bits
http://fr2.php.net/manual/fr/language.o ... itwise.php
surtout que trouver la page en question du manuel ne coule pas de source.
J'avais fait un truc analogue en utilisant une fonction différente suivant la place de la lettre dans le mot.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 52 Messages

01 janv. 2012, 20:59

Pour faire simple, l'opération Xor (Ou exclusif) sur un nombre est réversible.
6 xor 5 = 3

3 xor 5 = 6
c'est ce qui permet de chiffrer/déchiffrer. Mais il faut chiffrer chaque lettre avec une valeur différente,
car si le "a" devient à chaque fois un "f" et le "b" devient à chaque fois un "h", ça prends 10 secondes à déchiffrer.
J'ai donc fait varier la valeur de 3 à 27 afin que ce soit assez difficile de retrouver le texte de départ... :)

La cigale, ayant chanté tout l'été, se trouva fort dépourvue quand la bise fût venue...

devient, une fois chiffré:

Og)ofuttf*)mvs{l#eamaf3}be|xj)5lls},c53}be|xj)a>fgjy{w.4#ul,{`zmug)j``a8g lmlga}8vfy}d`}#w|mav5tb&ke|w5~%sje}q.l#plbzw;6-