pyAggr3g470r 2.0 – News
Quelques nouvelles sur l’évolution de pyAggr3g470r: historique: on peut maintenant naviguer dans l’ensemble des articles chronologiquement via des nuages de tags; la documentation et le wiki sont à jour avec un script d’installation; utilisation si disponible du module blist de haute performance pour les listes; encore un peu plus social avec un compteur Twitter. On peut donc maintenant partager des articles avec Google Buzz, delicious, Identi.ca, Digg, reddit, Scoopeo, Blogmarks, Twitter et par QR Code. nombreuses petites améliorations de l’interface (meilleur présentation de la description des articles pour une lecture plus agréable) et du code en général; ma base de test contient maintenant plus de 6500 articles avec description et c’est toujours rapide. Voilà, ce n’est pas grand chose. Ces dernières semaines les évolutions sont moins importantes que dhabitude. Il s’agit surtout daméliorations. La base d’articles commence à être assez conséquente pour faire des tests. D’ici une semaine ou deux on verra plus de nouveautés, promis 😉
WebM, VP8, Theora et Vorbis
L’objectif de ce billet est déclaircir un peu les choses à propos des nouveaux formats dont on parle de plus en plus. J’espère qu’il vous sera utile, il l’est pour moi. Lets go.
Stegano and the Free Software Song
git clone https://git.sr.ht/~cedric/stegano cd stegano wget http://www.gnu.org/music/free-software-song.ogg ./lsb-s.py --hide -i ./pictures/Montenach.png -o ./pictures/Montenach_enc.png -f ./free-software-song.ogg rm free-software-song.ogg ./lsb-s.py --reveal -i ./pictures/Montenach_enc.png -b ./cool-song.ogg Ceci seulement pour annoncer qu’une ligne de commande est disponible (avec d’autres améliorations). Et nhésitez pas à cacher cette fabuleuse chanson dans toutes vos images.
Photo libre d’Irlande
Petite pause avec la stéganalyse pour tester quelque chose d’un peu différent.
Stéganalyse de la méthode LSB
Comme expliqué dans le billet précédent la technique LSB (Least Significant Bit) est aisément attaquable. En effet si pour loeil modifier le bit de poids faible est invisible il n’en est pas de même pour un script Python. Nous allons donc utiliser une technique qui consiste tout simplement à remplacer les composantes pairs des pixels par 0 et les composantes impairs par 255. Ce qui veut dire que le pixel (132, 247, 123) deviendrait (0, 255, 255).
Lena
La technique de stéganographie utilisée précédemment pour cacher un message dans une photo est très loin d’être parfaite, comme Christophe la justement fait remarquer. Elle consistait simplement à remplacer la composante rouge (un octet) de chaque pixel par la valeur ASCII d’un caractère du message à cacher. Ceci en partant du début du fichier. La transformation est la suivante:
Lenna
Découvre le message de Lenna. Besoin d’un indice? import urllib from PIL import Image def decode_image(img): width, height = img.size msg = "" index = 0 for row in range(height): for col in range(width): r, g, b = img.getpixel((col, row)) if row == 0 and col == 0: msg_length = r elif index <= msg_length: msg += chr(r) index += 1 return msg urllib.urlretrieve("https://www.cedricbonhomme.org/images/blog/2014/08/Lenna_Simple_Method.png", "Lenna.png") img = Image.open("Lenna.png") print decode_image(img)
Google AI Challenge
Quand le challenge dIA de Google prouve par la pratique que Python est supérieur et que Java est inférieur.
pySecret
you@debian:~$ hg clone https://hg.sr.ht/~cedric/pysecret you@debian:~$ ipython In [1]: from pysecret import permutation In [2]: permutation.encrypt("Python est un très bon language!", [2,4,0,1,3]) Out[2]: 'toPyhetn snt u \xa8 r\xc3snlbo gaanu!XgeX' In [3]: print permutation.decrypt(permutation.encrypt("Python est un très bon language!", [2,4,0,1,3]), [2,4,0,1,3]) Python est un très bon language!XX In [4]: from pysecret import rsa In [5]: rsa_cipher = rsa.RSA() In [6]: rsa_cipher.decrypt_text("eJwNjrsRw1AMw3pPksonUqQ+O3gJ9ymyf5VXEzjw8/3hehgloJwwmO0eAxFFbW8oc7MrpyowuWLk\nmZVuzn AstTCUcppNL1yaQcoQNx1NxbSPq8YUaCzqEO6UVMsk4mSb54lI1kmsn+u9/9cOIaE=") Out[6]: 'Il reste encore beaucoup de travail!' In [7]: exit() Do you really want to exit ([y]/n)? y you@debian:~$ ls -l pysecret/ total 140 -rwx------ 1 you you 1356 2010-09-26 18:23 afine.py -rwx------ 1 you you 883 2010-09-26 18:24 autokeycipher.py -rwx------ 1 you you 774 2010-09-26 18:06 cesar.py -rwx------ 1 you you 35146 2010-04-29 22:32 COPYING -rwx------ 1 you you 1921 2010-09-26 18:19 elgamal.py -rwx------ 1 you you 1299 2010-09-26 18:21 hill.py -rwx------ 1 you you 2 2010-09-26 18:14 __init__.py -rwx------ 1 you you 1629 2010-09-26 18:26 permutation.py -rwx------ 1 you you 1704 2010-09-26 18:26 rabin.py -rwx------ 1 you you 6402 2010-09-26 18:07 rsa_gui.py -rwx------ 1 you you 3824 2010-09-26 18:26 rsa.py -rwx------ 1 you you 908 2010-09-26 18:28 substitution.py -rwx------ 1 you you 10420 2010-09-26 18:28 utils.py -rwx------ 1 you you 2234 2009-02-26 22:06 vigenere.py
Planet Wars
Programmez votre bot et venez vous affronter au Google AI Challenge.