IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques tierces Python Discussion :

Bibliothèques de chiffrement de texte et de fichier


Sujet :

Bibliothèques tierces Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2016
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Bibliothèques de chiffrement de texte et de fichier
    Bonjour,

    Je cherches des classes pour chiffrer du texte et des fichiers avec une clé le plus simplement possible.

    Merci de votre aide

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 279
    Points : 36 765
    Points
    36 765
    Par défaut
    Salut,

    Techniquement des "classes", c'est juste une façon d'organiser un code. Vous recherchez plutôt une bibliothèque de chiffrement/cryptographie. Ceci dité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
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2016
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    oAES = AES.new("clé", AES.MODE_ECB, IV="")
    sTxtC = oAES.encrypt("message")
    Quand j'essaie, à chaque fois j'ai une exception : "ValueError : AES key must be either 16, 24 or 32 bytes long"
    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 ?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 279
    Points : 36 765
    Points
    36 765
    Par défaut
    Salut,

    Citation Envoyé par TiDi. Voir le message
    J'ai deux question : la clé est entrée par l'utilisateur, comment faire pour l'adapter à AES ?
    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.

    Citation Envoyé par TiDi. Voir le message
    Et qu'est-ce que l'IV, comment le définir ?
    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
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2016
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    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é :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    iv = Random.new().read(AES.block_size)
    Pour la clé c'est bon aussi.

    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 ?

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 279
    Points : 36 765
    Points
    36 765
    Par défaut
    Citation Envoyé par TiDi. Voir le message
    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).
    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:
    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'
    >>>
    Citation Envoyé par TiDi. Voir le message
    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.
    Dans les deux cas ce sont des "bytes", non?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    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

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2016
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci pour votre aide.

    J'ai essayé ça mais ça ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    oAES = AES.new(sCle, AES.MODE_ECB)
    sTexteC = oAES.encrypt(sTexte.encode())
    Je crois que ça vient de PyCrypto qui fait la conversion string to byte lui même parce qu'avec Fernet ça marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    oFernet = Fernet(sCle)
    sTexteC = oFernet.encrypt(sTexte.encode())
    Pour ce qui de l'adaptation du texte et de la clé pour AES :
    Le texte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if len(sTexte) % 16 != 0:
    	iN = 16 - (len(sTexte) % 16)
    	for i in range(0, iN):
    		sTexte += "\0"
    Et au moment du déchiffrage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sTexteD = oAES.decrypt(sTexte).replace(b"\0", b"")
    La clé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    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"
    Normalement avec ça, toute les données entrées par l'utilisateur peuvent passer par AES.


    Du coup, pour mon projet, je crois que je vais me tourner vers Fernet.

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 279
    Points : 36 765
    Points
    36 765
    Par défaut
    [QUOTE=TiDi.;8540708]J'ai essayé ça mais ça ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    oAES = AES.new(sCle, AES.MODE_ECB)
    sTexteC = oAES.encrypt(sTexte.encode())
    Ca ne marche pas n'est pas un message d'erreur et le code que vous montrez ne permet pas de reproduire quoi que ce soit.

    Citation Envoyé par TiDi. Voir le message
    Du coup, pour mon projet, je crois que je vais me tourner vers Fernet.
    Si vous ne prenez pas la peine d'essayer de comprendre ce que vous faites, la patrouille vous rattrapera assez vite.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Programme de remplacement de texte dans des fichiers
    Par Invité4 dans le forum Linux
    Réponses: 13
    Dernier message: 12/11/2006, 16h06
  2. Récupération d'un texte d'un fichier ?
    Par lipczynski dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 18/08/2005, 10h27
  3. [langage] Remplacer du texte dans un fichier
    Par Michaël dans le forum Langage
    Réponses: 9
    Dernier message: 11/03/2005, 15h19
  4. Ajout de texte dans un fichier
    Par willowII dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 24/08/2004, 19h30
  5. [langage] Ecrire un bloc de texte dans un fichier
    Par sarahbes dans le forum Langage
    Réponses: 6
    Dernier message: 10/06/2004, 11h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo