Bonjour, j'essaye de chiffrer et déchiffrer en AES plusieurs types de fichiers et la je bloque sur les images... Aucun problème pour la chiffrer, mais le déchiffrage ne fonctionne pas... j'ai l'impression qu'il me rechiffre l'image...

voila mon code pour chiffrer :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/usr/bin/python
# -*- coding: utf-8 -*-
 
from Crypto.Cipher import AES
import re
from PIL import Image
 
aes = AES.MODE_CBC
 
liste=[".JPG",".JPEG",".GIF",".ICO",".BMP",".DIB",".JPE",".PNG",".JFIF",".TIF",".TIFF"]
 
def extension(text):
	ext = re.compile(r"(.[a-zA-Z0-9]+)$")
	if ext.search(text):
		return ext.search(text).group(0).upper()	
 
def FonctionCrypteurAES(fichiernoncrypt,fichiercryptAES,fichiercleAES):
	fichier = fichiernoncrypt
	fichier_code = fichiercryptAES
	fichier_cle = fichiercleAES
	exten = extension(fichiernoncrypt)
	exten2 = extension(fichier_code)
 
	fichier_coder = open(fichier_code,"wb")
	fichier_coder.close()
 
	cle = open(str(fichier_cle),"rb")
	key = cle.read()
	coder_aes = AES.new(str(key), aes)
 
	if not exten in liste :
		handler = open(str(fichier),"rb")
		a_coder = handler.read()
		handler.close()
		if (len(a_coder) % 16) != 0:
			n = 16 - (len(a_coder) % 16)
			for i in range(0, n):
				a_coder += '\0'
 
		motcrypte = coder_aes.encrypt(str(a_coder))
		fichier_coder = open(str(fichier_code),"ab+")
		fichier_coder.write(str(exten)+"\n")
		fichier_coder.write(motcrypte)
		fichier_coder.close()
	else:
		input_image = Image.open(fichier)
		image_string = input_image.tostring()
		if (len(image_string) % 16) != 0:
			n = 16 - (len(image_string) % 16)
			for i in range(0, n):
				a_coder += '\0'
 
		encrypted = coder_aes.encrypt(str(image_string))
		encrypted_img = Image.frombuffer("RGB", input_image.size, encrypted, 'raw',"RGB", 0, 1)
 
		if not exten2 in liste:
			encrypted_img.save(fichier_code, 'JPEG')
			os.remove(fichier_code)
		else :
			encrypted_img.save(fichier_code)


et celui pour déchiffrer :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#!/usr/bin/python
# -*- coding: utf-8 -*-
 
from Crypto.Cipher import AES
import re
import os
from PIL import Image
 
mode = AES.MODE_CBC
liste=[".JPG",".JPEG",".GIF",".ICO",".BMP",".DIB",".JPE",".PNG",".JFIF",".TIF",".TIFF"]
 
def fin_ligne(text):
	fin = re.compile(r"(.[a-zA-Z0-9]+){1}[\n\r]{0,2}")
	if fin.search(text):
		return fin.search(text).group(0)
def extension(text):
	ext = re.compile(r"(.[a-zA-Z0-9]+)$")
	if ext.search(text):
		return ext.search(text).group(0).upper()	
 
def FonctionDecrypteurAES(fichiercryptAES,fichierdecryptAES,fichiercleAES):
	fichier = fichierdecryptAES
	fichier_code = fichiercryptAES
	fichier_cle = fichiercleAES
	exten = extension(fichier)
 
	fichier_decrypt = open(fichier,"wb")
	fichier_decrypt.close()
 
	handler = open(str(fichier_code),"rb")
	a_decoder = handler.read()
	handler.close()
 
	cle = open(str(fichier_cle),"rb")
	key = cle.read()
	decoder = AES.new(str(key), mode)
 
	if not exten in liste :
		fin = str(fin_ligne(a_decoder))
		a_decoder2 = a_decoder.replace(str(fin),"")
		# if (len(a_decoder2) % 16) != 0:
			# n = 16 - (len(a_decoder2) % 16)
			# for i in range(0, n):
				# a_decoder2 += '\0'
		motdecrypte = decoder.decrypt(str(a_decoder2))
		space = re.compile(r"[\0]+$")
		if space.search(str(motdecrypte)) :
			motdecrypte = motdecrypte.replace("\0",'')
		fichier_decrypt = open(str(fichier),"ab+")
		fichier_decrypt.write(motdecrypte)
		fichier_decrypt.close()
 
	else:
		input_image = Image.open(fichier_code)
		image_string = input_image.tostring()
		# if (len(image_string) % 16) != 0:
			# n = 16 - (len(image_string) % 16)
			# for i in range(0, n):
				# image_string += '\0'
		decrypted = decoder.decrypt(str(image_string))
		space = re.compile(r"[\0]+$")
		if space.search(str(decrypted)) :
			decrypted = decrypted.replace("\0",'')
		decrypted_img = Image.frombuffer("RGB", input_image.size, decrypted, 'raw',"RGB", 0, 1)
		decrypted_img.save(fichier)
si quelqu'un a une idée!

Merci