Bonjour à tous,
C'est ma première visite et mon premier message posté parmi vous.
J'espère passer de bons moments avec vous et contribuer à l'évolution de ce forum.
Je vous poste un code de chiffrement AES sous python. Dans ce code je chiffre/déchiffre un fichier passé en paramètre. Pour les deux cas de figure (Chiffrement et Déchiffrement), une clé AES ,crée dans le même programme, sera utilisée.
Mon problème réside dans le point suivant:
Moi je veux générer cette clé pour ensuite la stocker dans un fichier.
Vue que cette clé comporte des caractères bizarres, elle est mal écrites dans le fichier dans le quelle je veux la mettre puisque j'ai essayé cette méthode et je n'arrive pas ni à chiffrer ni à déchiffrer le fichier (.txt., .pdf ....) passé en paramètres.
Donc est ce possible de stocker cette clé dans un fichier pour ensuite l'utiliser ou pas et comment faire.
Sachant qu'avec le code posté, j'arrive à chiffrer et déchiffrer n'importe quel fichier sans problème mais ce n'est pas ce que je voulais.
Voilà le code et merci d'avance pour votre aide.

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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
import os, random, struct
from Crypto.Cipher import AES
import Crypto.Random.OSRNG.posix
 
class Generateur:
    """
        Classe permettant de generer des cle aes de 256 bits
 
    """
 
    def generer_cle_aes(self):
        """
 
            Cette fonction genere une cle aes de 256 bits
 
        """
 
        cle = Crypto.Random.OSRNG.posix.new().read(32)
 
        return cle
 
class Chiffrement:
    """
 
        Classe permettant le chiffrement de fichiers avec 
 
        l'algorithme de chiffrement AES (mode CBC)
 
    """
 
 
 
    def __init__(self):
 
        """ """
 
    def chiffrer(self, key, fichier_clair, fichier_chiffre=None, tBloc=64*1024):
        """
 
            Cette fonction chiffre un fichier passe en parametre
 
            @param fichier_clair String: le fichier a chiffre
 
            @param fichier_chiffre String: le fichier chiffre
 
        """
 
        if not fichier_chiffre:
 
            fichier_chiffre = fichier_clair + '.enc'
 
        iv = ''.join(chr(random.randint(0, 0xFF)) for i in range(16))
 
        encryptor = AES.new(key, AES.MODE_CBC, iv)
 
        filesize = os.path.getsize(fichier_clair)
 
        with open(fichier_clair, 'rb') as infile:
 
            with open(fichier_chiffre, 'wb') as outfile:
 
                outfile.write(struct.pack('<Q', filesize))
 
                outfile.write(iv)
 
                while True:
 
                    bloc = infile.read(tBloc)
 
                    if len(bloc) == 0:
 
                        break
 
                    elif len(bloc) % 16 != 0:
 
                        bloc += ' ' * (16 - len(bloc) % 16)
 
                    outfile.write(encryptor.encrypt(bloc))
 
 
class Dechiffrement:
    """
 
        Classe permettant le dechiffrement de fichiers avec
 
        l'algorithme de chiffrement AES (mode CBC)
 
    """
 
    def __init__(self):
 
        """ """
 
    def dechiffrer(self, key, in_filename, out_filename=None, tBloc=24*1024):
        """
 
            Cette fonction chiffre un fichier passe en parametre
 
            @param fichier_chiffre String: le fichier a dechiffre
 
            @param fichier_chiffre String: le fichier dechiffre (clair)
 
        """
 
        if not out_filename:
 
            out_filename = os.path.splitext(in_filename)[0]
 
        with open(in_filename, 'rb') as infile:
 
            origsize = struct.unpack('<Q', infile.read(struct.calcsize('Q')))[0]
 
            iv = infile.read(16)
 
            decryptor = AES.new(key, AES.MODE_CBC, iv)
 
            with open(out_filename, 'wb') as outfile:
 
                while True:
 
                    bloc = infile.read(tBloc)
 
                    if len(bloc) == 0:
 
                        break
 
                    outfile.write(decryptor.decrypt(bloc))
 
                outfile.truncate(origsize)
 
def main():
 
    c = Chiffrement()
 
    g = Generateur()
 
    key = g.generer_cle_aes()
 
    c.chiffrer(key,'/home/hernanes/Bureau/a.pdf', '/home/hernanes/Bureau/a.pdf.enc')
 
    d = Dechiffrement()
 
    d.dechiffrer(key,'/home/hernanes/Bureau/a.pdf.enc', '/home/hernanes/Bureau/abc.pdf')
 
 
    key = g.generer_cle_aes()
 
    c.chiffrer(key,'/home/hernanes/Bureau/travis.mp3', '/home/hernanes/Bureau/travis.mp3.enc')
 
    d.dechiffrer(key,'/home/hernanes/Bureau/travis.mp3.enc', '/home/hernanes/Bureau/travis1.mp3')
 
 
if __name__ == "__main__":
 
    main()