PyCrypto - AES - Chiffrer du texte avec des caractères spéciaux
[TiDi]
Messages postés
124
Date d'inscription
Statut
Membre
Dernière intervention
-
[TiDi] Messages postés 124 Date d'inscription Statut Membre Dernière intervention -
[TiDi] Messages postés 124 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'utilise la bliothèque PyCrypto pour chiffrer du texte avec AES :
Ces deux fonctions fonctionnent très bien avec des clés et textes sans accent mais pour tous les caractères spéciaux j'ai une erreur :
Si la clé contient des accents :
Si le texte contient des accents :
En fait c'est les memes erreurs qui sont relevées si on ne traite pas les données utilisateurs ... sauf que je les ais traitées, ça marche très bien sans accent
Comment faire pour chiffrer du texte avec tous les caractères UTF-8 ?
Je voudrais que le chiffrement fonctionne avec tous les caractères présent dans un fichier avec un objet enregistré avec Pickle
Merci de votre aide
--
TiDi
J'utilise la bliothèque PyCrypto pour chiffrer du texte avec AES :
from Crypto.Cipher import AES def _SysChiffre(sCle, sTexte): # Vérification des données utilisateurs if len(sCle) == 0: return 1 if len(sTexte) == 0: return 1 # Traitement des données utilisateurs if len(sTexte) % 16 != 0: iN = 16 - (len(sTexte) % 16) for i in range(0, iN): sTexte += "\0" if len(sCle) != 16 or len(sCle) != 24 or len(sCle) != 32: if len(sCle) < 16: iN = 16 - len(sCle) for i in range(0, iN): sCle += "\0" elif len(sCle) > 16 and len(sCle) < 24: iN = 24 - len(sCle) for i in range(0, iN): sCle += "\0" elif len(sCle) > 24 and len(sCle) < 32: iN = 32 - len(sCle) for i in range(0, iN): sCle += "\0" else: return 1 # Chiffrement oAES = AES.new(sCle, AES.MODE_ECB) sTexteC = oAES.encrypt(sTexte) return sTexteC def _SysDechiffre(sCle, sTexte): # Vérification des données utilisateurs if len(sCle) == 0: return 1 if len(sTexte) == 0: return 1 # Traitement des données utilisateurs if len(sCle) != 16 or len(sCle) != 24 or len(sCle) != 32: if len(sCle) < 16: iN = 16 - len(sCle) for i in range(0, iN): sCle += "\0" elif len(sCle) > 16 and len(sCle) < 24: iN = 24 - len(sCle) for i in range(0, iN): sCle += "\0" elif len(sCle) > 24 and len(sCle) < 32: iN = 32 - len(sCle) for i in range(0, iN): sCle += "\0" # Déchiffrement oAES = AES.new(sCle, AES.MODE_ECB) sTexteD = oAES.decrypt(sTexte).replace(b"\0", b"") return sTexteD
Ces deux fonctions fonctionnent très bien avec des clés et textes sans accent mais pour tous les caractères spéciaux j'ai une erreur :
Si la clé contient des accents :
ValueError : AES key must be either 16, 24, or 32 bytes long
Si le texte contient des accents :
ValueError : Input strings must be a multiple of 16 in length
En fait c'est les memes erreurs qui sont relevées si on ne traite pas les données utilisateurs ... sauf que je les ais traitées, ça marche très bien sans accent
Comment faire pour chiffrer du texte avec tous les caractères UTF-8 ?
Je voudrais que le chiffrement fonctionne avec tous les caractères présent dans un fichier avec un objet enregistré avec Pickle
Merci de votre aide
--
TiDi
2 réponses
-
Je suppose que cela provien du codage des caractères non ASCII sur plus d'un octet en UTF-8, d'où l'erreur.
-
Ok ben j'ai résolu mon problème tout seul : c'est ma partie de traitement des données qui pose problème. Dans cette partie, faut juste remplacer tous les len(sCle/sTexte) par len(sCle/sTexte.encode("utf-8")