Chiffrement symétrique et clef partagée
Principe
Application
-
table de vérité du décryptage d'image pixel de l'image
à crypterpixel de la clef
de codagepixel de l'image
cryptéepixel de la clef
de codagepixel de l'image
décryptée0 0 0 0 0 0 1 1 1 0 1 0 1 0 1 1 1 0 1 1 - On constate que l'on retrouve pour le pixel de l'image décryptée les mêmes données que pour l'image à crypter.
- Nous allons donc décoder les images en effectuant un ou exclusif entre l'image cryptée et la clef.
- La clef contient 1000 x 1000 = 1 000 000 de pixels.
- Pour chaque pixel il y a 255 x 255 x 255 = 16 581 375 de couleurs possibles.
- Le nombres de clefs différentes possibles est donc : 1 000 000 x 16 581 375 = 1,65.1013 clef différentes possibles.
- Si le décodage prends 1ms par clef, la durée d'un craquage en force brute sera de :
1,65.1013 x 1.10-3 = 1.65.1010s = 523 ans !!!!
-
def code(image:str, image_cryptee:str, clef:str): ''' la fonction code prend en paramètres le nom des fichiers PNG de l'image à coder et de la clef, ainsi que de l'image qui va être codée. la fonction ne renvoie rien, elle écrit le fichier de l'image codée sur le disque, ou l'affiche. ''' img1 = Image.open(image) # ouverture de l'image de de départ (à coder ou décoder) cle = Image.open(clef) # ouverture de la clef img2 = Image.new('RGB', (img1.size[0], img1.size[1])) #création de l'image finale (codée ou décodée) pixel2 = [0,0,0] for i in range (img1.size[0]): for j in range(img1.size[1]): pixel1 = img1.getpixel((i,j)) # récupération du pixel de l'image de départ pixel_clef = cle.getpixel((i,j)) # récupération du pixel de la clef for k in range(3): # parcours des trois composantes RVB pixel2[k] = pixel1[k]^pixel_clef[k] # ou exclusif entre chaque composante img2.putpixel((i,j),tuple(pixel2)) # le tableau 'pixel2' est transformé en tuple puis écrit dans l'image d'arrivée img2.save(image_cryptee) # ou : img2.show() - Il n'est pas nécessaire de coder une fonction
decode()car c'est la même fonction que la fonctioncode() - Mystère...Avec ce que vous avez au dessus, vous devriez vous en sortir...
Chiffrement asymétrique et clef privée / clef publique
Principe
Exemple d'échange clef privée / clef publique
- La clef publique est 2893, la clef privée est 263. Le décalage est donc : 2893/263 = 11
- Le message décodé est donc : VU COMME CELA C'EST FACILE LA CRYPTOGRAPHIE.