Bonjour,
Je cherches des classes pour chiffrer du texte et des fichiers avec une clé le plus simplement possible.
Merci de votre aide
Bonjour,
Je cherches des classes pour chiffrer du texte et des fichiers avec une clé le plus simplement possible.
Merci de votre aide
Salut,
Techniquement des "classes", c'est juste une façon d'organiser un code. Vous recherchez plutôt une bibliothèque de chiffrement/cryptographie. Ceciditécrit, et à défaut de plus de détails sur ce que vous voulez en faire, peut être commencer par jeter un œil à pycrypto. Ca permettra de savoir si ce que çà fait répond (ou pas) à vos besoins.
- W
Merci, j'ai installé pycrypto, j'ai regardé un peu comment ça marcher mais j'ai beaucoup de mal avec l'anglais.
Pour chiffrer du texte :
Quand j'essaie, à chaque fois j'ai une exception : "ValueError : AES key must be either 16, 24 or 32 bytes long"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 oAES = AES.new("clé", AES.MODE_ECB, IV="") sTxtC = oAES.encrypt("message")
J'ai deux question : la clé est entrée par l'utilisateur, comment faire pour l'adapter à AES ? Et qu'est-ce que l'IV, comment le définir ?
Salut,
Il n'est pas si compliqué de vérifier que la clé à la longueur attendue ou de la compléter par des caractères quelconques.
Vous avez un exemple dans la documentation ici. Vous êtes supposé connaître AES avant de l'utiliser notamment pour vous assurer que ce chiffrement répond bien à ce que vous voulez faire et vous avez une littérature abondante disponible en quelques clics sur le sujet.
Pourquoi ne pas essayez de coder un chiffrement basé sur Vigenere. C'est beaucoup plus simple à comprendre et vous apprendriez pas mal de choses à essayer de le coder.
- W
Bon au sujet de l'IV, je ne sais toujours pas ce que c'est mais j'ai trouvé comment le définir mais avec le mode ECB l'IV n'est pas utilisé :
Pour la clé c'est bon aussi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part iv = Random.new().read(AES.block_size)
Maintenant mon problème est que les caractères acceptés sont très limités. J'ai essayé avec la classe Fernet et PyCrypto sur différent algo de chiffrement symétrique mais rien n'y fait seul les caractères littéraux ASCII sont acceptés et ça vient du petit "b" avant la définition d'une chaine (je ne sais pas comment s'appelle).
Pour mon projet, il y a deux types de données à chiffrer : des fichiers contenant des objets enregistrés par Pickle et du texte entré par l'utilisateur encodé en UTF-8.
Donc je peux oublier ces deux bibliothèques, auriez-vous une solution ?
Le "b" signifie bytes (en français on dit octet). Ils se représentent par un nombre non signé dans 0..255.
Des littéraux contenant des caractères accentués tels que 'àéïôù' ne peuvent pas être interprétés en tant que "bytes" directement, il faut dire quel encoding utiliser:
Dans les deux cas ce sont des "bytes", non?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 >>> b'ééé' File "<stdin>", line 1 SyntaxError: bytes can only contain ASCII literal characters. >>> 'ééé'.encode() b'\xc3\xa9\xc3\xa9\xc3\xa9' >>>
- W
l'IV est ce qu'on appelle le "vecteur d'initialisation", il est directement lié au mode de chiffrement
https://fr.wikipedia.org/wiki/Mode_d...ecteur_initial
je rejoins wiztricks sur le fait qu'il est impératif de connaitre et comprendre les bases de la cryptographie et du chiffrement de données pour utiliser correctement une lib comme pycrypto
Partager