Bonjour à vous,

j'essaye de chiffrer un fichier texte avec PyCrypto et de l'envoyer à travers un réseau depuis un serveur vers un client.
Le chiffrement utilisé est AES 16bytes.
Si j'ai bien compris, le nombre de caractères du texte à chiffrer doit être un multiple de 16.
J'ai donc mis dans mon code une fonction qui rempli le fichier avec le caractère '{' pour arriver à un multiple de 16 et je les retire à la réception dans le client.

Je parviens à chiffrer mon fichier et à l'envoyer du serveur au client et à le déchiffrer.

MON PROBLÈME:
le fichier peut contenir des caractères comme () {} [] sans problème mais si il contient des caractères spéciaux du style é " è ' ç etc.. une erreur apparaît sur le serveur :
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/Crypto/Cipher/blockalgo.py", line 244, in encrypt
return self._cipher.encrypt(plaintext)
ValueError: Input strings must be a multiple of 16 in length


Comment puis-je chiffrer un fichier contenant des caractères spéciaux et accentués ?



Voici le code de mon serveur

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
 
# -*- coding: utf-8 -*-
from Crypto.Cipher import AES
import socket
import threading
 
#configuration AES
key = "AAAAAAAAAAAAAAAA"
cipher = AES.new(key)
 
def pad (s):
    return s + ((16-len(s)%16)*'{')
 
def encrypt(plaintext):
    global cipher
    return cipher.encrypt(pad(plaintext)).encode('utf-8')
 
class ClientThread(threading.Thread):
 
    def __init__(self, ip, port, clientsocket):
 
        threading.Thread.__init__(self)
        self.ip = ip
        self.port = port
        self.clientsocket = clientsocket
        print("[+] Nouveau thread pour %s %s" % (self.ip, self.port, ))
 
    def run(self):
        print("Connection de %s %s" % (self.ip, self.port, ))
        r = '/Users/macbookpro15/Desktop/test.conf'
        fichier = open(r, 'r')
        f = fichier.read()
        data = encrypt(f)
        fichier.close()
        self.clientsocket.send(data)
        print("Client déconnecté...")
        self.clientsocket.close()
 
tcpsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcpsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
tcpsock.bind(("192.168.1.2",1111))
 
while True:
    tcpsock.listen(10)
    print( "En écoute...")
    (clientsocket, (ip, port)) = tcpsock.accept()
    newthread = ClientThread(ip, port, clientsocket)
    newthread.start()

MERCI pour vos attentions