Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#1 12-11-2018 18:14:32

Saule
Invité

[PYTHON] Logiciel de cryptographie, demande d'avis pour amélioration.

Bonjour, jais codé un programme en python est j'ais besoin d'aide.

Déjà voila les codes. (Le Cryptage est Le Décryptage.)

Le Code De Cryptage

Le Code De Décryptage

J'aimerait savoir si vous trouvez le cryptage "sûr" est comment l'améliorer.

Pour l'optimisation du programme je ferais sa une fois les deux mis dans un seul fichier est compilé.

Merci D'avoir lu.

#2 15-11-2018 20:13:44

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 907

Re : [PYTHON] Logiciel de cryptographie, demande d'avis pour amélioration.

Bonjour,

A quoi te sert d'importer le module pickle ? Je ne vois pas où tu l'utilises dans ce script.
A quoi te sert d'importer le module maths ? Je ne vois pas où tu l'utilises dans ce script.
Ton code est une horreur pythonesque, tu auras du boulot...
Mais c'est déjà bien d'avoir produit du code...
Tu l'as testé dans les deux sens ?


Je ne ne comprends pas ce que tu veux faire avec ces 3 lignes :
       

  listekey = str(listekey)
         textcode = " ".join(liste)
         textkey = " ".join(listekey)

Voilà un exemple de keygen :
[20, 30, 27, 35, 31, 39, 47, 43, 58, 17, 26, 46, 33, 16, 10, 25, 17, 46, 11, 58, 46, 12, 19, 23, 12]

Voilà str(keygen) :
'[20, 30, 27, 35, 31, 39, 47, 43, 58, 17, 26, 46, 33, 16, 10, 25, 17, 46, 11, 58, 46, 12, 19, 23, 12]'

Et enfin, voilà  " ".join(keygen) :
'[ 2 0 ,   3 0 ,   2 7 ,   3 5 ,   3 1 ,   3 9 ,   4 7 ,   4 3 ,   5 8 ,   1 7 ,   2 6 ,   4 6 ,   3 3 ,   1 6 ,   1 0 ,   2 5 ,   1 7 ,   4 6 ,   1 1 ,   5 8 ,   4 6 ,   1 2 ,   1 9 ,   2 3 ,   1 2 ]'
Je n'ai pas regardé le code de décryptage, mais là je ne comprends pas...

Dans l'attente d'explications, voilà un code où je n'ai pas retouché cette partie et je verrai la suite après...

Donc, résumons, à partir d'une phrase non accentuée (et l'apostrophe ? et le ç ?),
- tu extrais les lettres une par une
- tu génères un nombre pseudo-aléatoire entre 1 et 60 :
  * tu n'as pas la garantie que sur une phrase de 1000 caractères - par ex - le "A" toujours par exemple soit toujours associé au même nombre,
  * tu n'as pas la garantie que chaque tiré au hasard soit différent...
  Pas gênant ? T'es sûr ?

Dans l'idée ça ressemble un peu au chiffre du Che : http://www.bibmath.net/crypto/index.php … oderne/che

Ton code simplifié (en partie) :


# -*-coding:Latin-1 -*

import os
import math
from random import randrange
import pickle

Liste_car =[' ', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '.', '?', '!', ',', ';', '/', '(','\)', '+', '-', '*', ':', '']


while 1:
    liste, listekey=[],[]
    print("\n\nNo Accents OR ERROR !\n")
    chaine = input("Tapez le texte : ").upper()
    for lettre in chaine:
        keygen=randrange(1,60)
        num_lettre=Liste_car.index(lettre)
        coe = num_lettre + keygen
        liste.append(coe)
        listekey.append(keygen)
    liste = str(liste)
    listekey = str(listekey)
    textcode = " ".join(liste)
    textkey = " ".join(listekey)
    cryptos_fich = open("cryptos.txt", "w")
    cryptos_fich.write("Text Code : \n")
    cryptos_fich.write(textcode)
    cryptos_fich.write("\n----------------------------------------------------------------------\nTextkey : \n")
    cryptos_fich.write(textkey)
    cryptos_fich.close()
    print("\n\n\n\n\n")
    print("Création du fichier terminée.")
    print("\n")
    os.system("pause")
    break
exit()
 

Notes :
upper() transforme un texte en majuscules : "n?%klkMNB".upper () ---> "N?%KLKMNB".
J'ai fait ça parce que j'ai vu que A ou a (par exemple) correspondent au même nombre
num_lettre = Liste_car.index(lettre)
Liste_car.index(lettre) retourne la position du caractère lettre dans la liste Liste_car.
Exemple :
Liste_car.index('*') --> 37

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#3 18-11-2018 08:44:10

Saule
Invité

Re : [PYTHON] Logiciel de cryptographie, demande d'avis pour amélioration.

Oui math est pickle sert a rien mais je me suis dit que je pouvait en avoir besoin pendant que je codée, je lais juste pas supprimer.


  listekey = str(listekey)
         textcode = " ".join(liste)
         textkey = " ".join(listekey)

Je pensé que je devers mètre la liste an une seul valeur sinon je pouvez pas l'importer, sait juste une erreur de ma part.

yoshi a écrit :

Donc, résumons, à partir d'une phrase non accentuée (et l'apostrophe ? et le ç ?),
- tu extrais les lettres une par une

Oui.


yoshi a écrit :

- tu génères un nombre pseudo-aléatoire entre 1 et 60

Oui, mais 0 est 60, 1 est comprit.


yoshi a écrit :

Tu n'as pas la garantie que sur une phrase de 1000 caractères - par ex - le "A" toujours par exemple soit toujours associé au même nombre,

Si, 'A' ou 'a' est égale a '1', sa change rien que au final les deux 'a' soit = a '5' est '43' dans la même frasse, le programme de décryptage comprendra se qu'il doit faire avec la clé.


yoshi a écrit :

Tu n'as pas la garantie que chaque tiré au hasard soit différent...
  Pas gênant ? T'es sûr ?

Non sinon se nais pas du hasard.
Le fait que jais limiter sa antre 0 est 60 je peut reconnaître que sa pause un problème.
Mais le fait que le chiffre soit toujours différent est juste pas utile en mont sense, la clé serait juste plus simple a cassé pour rien win en retours.


Voisi mon petit résumer de comment je voit le truc pour le cryptage :

Je prend les lettre une par une.
Aprée je créer un chiffre aléatoire entre 0 est 60. (que je pourrait ogmantée mais j'avait envie de le chiffre générer soit tout-jour < que 100.

Ensuite j'additionne 'la value de la lettre' (A = 1, B = 2 ext..) + 'le chiffre générer'.

Je mais le résulta dans la liste qui ressors a la fin comme text chiffrée est le chiffre générer dans la liste de la key.


Est mon petit résumer pour le décryptage :

Je prend le contenu dans le ficher est en différencient les nombre des chiffre.
Je mais la suite de nombre est de chiffre dans les liste correspondante (les value du text chiffrée est de la key.)

Puit je les prend un part un est je fait 'value du text chiffrée' - 'la key'.
Ensuit le me référé au valeur prédéfini que jais fait (A = 1, B = 2 ext..) est je récupérée un text lisible. 



Sa reste trée simple mais jais du mal a voir comment cassée un text chiffrée, sans savoir la limite de la key. (qui peut être agrandit.)
Si tu connait des méthode de décryptage pour cassée se type de code, sa serait super instructif pour moi.


yoshi a écrit :

Dans l'idée ça ressemble un peu au chiffre du Che

Ah d'accord, je le connaissait pas.
Mais pourquoi le chiffre utiliser pour la clée doit être de même longueur que le text ?

Merci pour upper(), aussi je comprend pas la ligne :

num_lettre=Liste_car.index(lettre)

Tu te référé a la liste que tu a fait plus haux mais comment tu trouve la valeur de la lettre ?
Sais pas plus simple d'utiliser 'if' est 'elif'?

Merci d'avoir prit le temps de me répondre.

#4 18-11-2018 14:50:30

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 907

Re : [PYTHON] Logiciel de cryptographie, demande d'avis pour amélioration.

Salut,

Bon, il va falloir que tu fasses un effort sur l'orthographe, parce que c'est très pénible à lire...

Tu te référé a la liste que tu a fait plus haut mais comment tu trouve la valeur de la lettre ?

As-tu testé ? Probablement, non !
Voilà une liste :
L=["to","ta","ti","tu","te", "toto","titi","tutu"]
Si je demande L[3] Python me répond "tu"...
3 est l'index (la position) du mot "tu" dans la liste L.
Les index commencent à zéro en Python...
Si tu demandes L.index("toto")  Python traduit ça par : quel le n° de la position du mot "toto" dans la liste L ? et il répond 5.

Sais C'est pas plus simple d'utiliser 'if' est et 'elif'?

Imagine, que tu aies une liste composée de 60 caractères où on trouverait le ç  % §\- & [ ] #  { } et bien d'autres, tu vas être obligé d'écrire 60 tests de comparaison puis 60 lignes d'affectations de valeurs soit et 120 lignes là où num= Liste.index(mot) te fait ça en une ligne ?
Qu'est-ce qui, à ton avis,  est le plus simple ?

Je pensé que je devers mètre la liste an une seul valeur sinon je pouvez pas l'importer, sait juste une erreur de ma part.

Désolé, je ne comprends pas...

Je prend le contenu dans le ficher est et en différencientciant les nombres des chiffres.

Ça, ça n'a pas de sens...
42 - par exemple  - est un nombre à deux chiffres
7 est un nombre à un chiffre.
Il y a dix nombres à un chiffre : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Un chiffre c'est le dessin utilisé pour écrire les nombres et pouvoir faire des calculs avec...
Alors tu différencies (sépares ?) quoi ?
le chiffre des unités et celui des dizaines ?

Mais pourquoi le chiffre utiliser pour la clée doit être de même longueur que le text ?

et la clé doit être changée à chaque message. Cf : https://www.apprendre-en-ligne.net/cryp … asque.html

Le masque jetable est le seul algorithme de cryptage connu comme étant indécryptable. C'est en fait un chiffre de Vigenère avec comme caractéristique que la clef de chiffrement a la même longueur que le message clair. Le système du masque jetable fut inventé par Gilbert Vernam en 1917, puis perfectionné par le major Joseph O. Mauborgne en 1918, qui inventa le concept de clef aléatoire.

Voir encore :
http://www.bibmath.net/crypto/index.php

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#5 22-11-2018 23:45:00

Saule
Invité

Re : [PYTHON] Logiciel de cryptographie, demande d'avis pour amélioration.

Oui excuse moi pour mon orthographe.

J'ai retouché le code sa donne sa au final.
textup.fr/297524Gd

Est pour l'histoire du masque jetable, j'ai beau chercher je comprends pas.

Moi je demande pourquoi la longueur de la clé doit être égal au texte chiffré, pas que tu me sites tout les endroits ou c'est marqué...

Je veux juste testé de comprendre pourquoi il le faut.

Pied de page des forums