Hello a tous,
une question de newbie, j'ai vu dans un mail une signature de la forme
perl -e 'print qq^;@) [###]^^qq^z\.MY{eLQ9^'
ceci renvoie le nom du gars: Andy Ford
please please, comment a t'il fait ?
Merci de votre aide.
Dan.
Version imprimable
Hello a tous,
une question de newbie, j'ai vu dans un mail une signature de la forme
perl -e 'print qq^;@) [###]^^qq^z\.MY{eLQ9^'
ceci renvoie le nom du gars: Andy Ford
please please, comment a t'il fait ?
Merci de votre aide.
Dan.
Ce n'est pas une question de newbie, il n'est pas toujours évident de lire des signatures en Perl "obfusqué" comme ici. En fait si je traduit un peu, ce qu'il a écrit revient à :
Et il "suffit" de savoir que '^' est l'opérateur xor en Perl pour voir que Andy Ford a simplement écrit une chaîne de dix caractères (longueur de "Andy Ford") qui lui plaisait (le ";@)" particulièrement) puis a complété avec une seconde chaîne composée des bons caractères pour obtenir "Andy Ford" une fois le xor appliqué.Code:print ( ";@) [###]" ^ "z\.MY{eLQ9" );
Par ailleurs tu n'es pas sur le bon forum, on ne postes pas sur le forum Perl principal, mais uniquement dans les sous-forums (Langage dans ton cas).
--
Jedaï
En complément de la réponse de Jedai, que j'ai eu du mal à comprendre à la première lecture:
Le code de l'auteur n' utilise aucune variable, uniquement 2 constantes pour générer un effet styllistique de code. C'est comme si au lieu d'écrire "3", il avait écrit en deux parties "1 + 2".
Il a pris chaque caractère, regardé la valeur ordinale du caractère, décomposé en 2 facteurs à combiner avec l'opérateur xor. Par exemple, le premier caractère de la chaine "Andy Ford" est un "A".
Il a utilisé pour le représenter ";" ^ "z".
En ASCII, la valeur ordinale de "A" est 65 ( 01000001 en binaire).
En ASCII, la valeur ordinale de ";" est 59 ( 00111011 en binaire).
En ASCII, la valeur ordinale de "z" est 122. ( 01111010 en binaire)
(voir la table ASCCII : http://www.cdrummond.qc.ca/cegep/inf...iles/ascii.htm )
La table du xor:Donc si on regarde ";" xor "z", on aCode:
1
2
3
4
5 0 xor 0 = 0 0 xor 1 = 1 1 xor 0 = 1 1 xor 1 = 0
Ce qui correspond bien à la valeur de "A".Code:
1
2
3
4 00111011 # caractère ";" xor 01111010 # caractère "z" = 01000001 # trouvé le caractère "A" !
Pour terminer, une petite parenthèse : La décomposition d'un nombre en 2 facteurs à combiner avec xor n'a rien de difficile, car une particularité de xor permet de dire:
Ainsi, on choisit un nombre qu'on veut décomposer (ici le caractère A), on choisit un nombre au hasard pour faire une combinaison (ici le caractère ";"), et on obtient le second facteur (caractère "z") par application de xorCode:A = B xor C <=> A xor B = C
Code:
1
2
3
4 00111011 # caractère A xor 01000001 # caractère ";" = 01111010 # caractère "z"
PS: la longueur de la chaine est de 9 caractères et non 10 ;)