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).

#26 28-12-2008 17:36:51

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

Re : [Basic puis Python] Programmer un un programme de crypt

Bonsoir,

Un point de détail, le code ASCII du A est 65.
La soustraction avec 65 est donc le décalage par rapport au A.

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#27 29-12-2008 16:41:05

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

Re : [Basic puis Python] Programmer un un programme de crypt

Salut,

J'ai écrit le script de codage avec décalage calculé à partir de A, B, C, D, E... au lieu de le faire uniquement par rapport à A : ça fonctionne.
Le décodage sera un jeu d'enfants... ;-)

[EDIT] Je confirme : 3 min... Ca marche aussi.
Bon, ton BASIC n'est pas (encore ?) très performant. Il ne peut pas traiter de chaînes de caractères de plus de 200 caractères !
J'ai essayé avec Python : le programme est plus court, code plus vite, et accepte plus de 200 caractères...
Dommage !
Pour coder (ou décoder) un texte, il te faudra le découper en tranches de 200 caractères à la fois.

@+

Dernière modification par yoshi (30-12-2008 17:17:07)


Arx Tarpeia Capitoli proxima...

Hors ligne

#28 30-12-2008 22:58:49

Lutcho74
Membre
Lieu : Vitrolles
Inscription : 22-12-2008
Messages : 136
Site Web

Re : [Basic puis Python] Programmer un un programme de crypt

Bonsoir,

Je ne comprend pas trop comment pourrais fonctionner ton décalage...
Et tu a l'aire de t'y connaitre en python pourrais tu me dire ou je pourrais trouver de la doc dessus stp parce que apparemment sa a l'aire plus intéressant que le basic.
Pour en revenir a ton décalage, j'aimerai bien essayer de le coder mais je comprend pas sont fonctionnement et je n'ait jamais vraiment eu a faire
au chaine en programmation je ne connais pas du tout la fonction d'ailler...pourrais tu me l'expliquer rapidement stp???

a+ et BONNE ANNÉE(J-1)

Dernière modification par Lutcho74 (30-12-2008 23:01:20)


La seule façon raisonnable de vivre en ce bas monde, c'est en dehors des règles.

Hors ligne

#29 02-01-2009 20:34:17

Lutcho74
Membre
Lieu : Vitrolles
Inscription : 22-12-2008
Messages : 136
Site Web

Re : [Basic puis Python] Programmer un un programme de crypt

Hey,
Yoshi tu disais : Apparemment ce serait du codage de Vigenère... Regarde ici : http://www.bibmath.net/crypto/poly/viganaljava.php3

Je penserai plutôt au masque jetable...sa serai plus probable...
A+


La seule façon raisonnable de vivre en ce bas monde, c'est en dehors des règles.

Hors ligne

#30 02-01-2009 21:07:38

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

Re : [Basic puis Python] Programmer un un programme de crypt

Bonsoir,

Meilleurs voeux.
Ton lien n'est autre que celui que je t'ai donné dans mon message #24. J'avais dit que ça pourrait presque être du codage de Vigenère (quand je décale par rapport au seul A) parce qu'avec peu de caractères (70) il trouve pratiquement la clé VICTORHUGO...

Par contre, j'ai testé une strophe d'une chanson de plus de 250 caractères codée avec le décalage variable : pfff ! Dans le vent, l'applet JAVA de Fred ne trouve rien... !

Codage variable :

DIM MessageClair$,Message$,Cle$,MessageCrypte$,LettreCle$,l$,i%,j%,l%,Sign%,CodeLettreMessage%,CodeLettreCle%,LongCle%,decalage%

REM INPUT "Entrer la phrase à crypter"',MessageClair$
MessageClair$="Il ne me parait pas absolument indispensable d'essayer de se noyer dans un verre d'eau"
l%=LEN(MessageClair$)
MessageClair$=UPPER$(MessageClair$)
Message$=""

FOR  i% = 1 TO l%
    l$=MID$(MessageClair$,i%,1)
    IF l$<>"'" AND l$<>" " AND  l$<>"-" AND l$<>"?" AND l$ <>"!" AND l$<>"," AND l$<>";" AND l$<>"."
        Message$=Message$+l$
    END_IF
NEXT i%
l%=LEN(Message$)

Cle$="EIJIYOSHIKAWA"
LongCle%=LEN(Cle$)
MessageCrypte$=""
FOR i% = 1 To l%
    CodeLettreMessage%=ASC(MID$(Message$,i%,1))
    IF LongCle%<l%
        j%=i%-int((i%-1)/LongCle%)*LongCle%
    ELSE
        j%=i%
    END_IF
    CodeLettreCle%=ASC(MID$(Cle$,j%,1))
    decalage%=CodeLettreCle%-64-j%
    Sign%=0
    IF CodeLettreMessage%+decalage%<65 THEN Sign%=1
    IF CodeLettreMessage%+decalage%>90 THEN Sign%=-1
    MessageCrypte$=MessageCrypte$+CHR$(CodeLettreMessage%+decalage%+26*sign%)
NEXT i%
REM Création d'une autre fenêtre et affichage d'un memo
form 1
memo 2 : parent 2,1
item_add 2, MessageCrypte$
full_space 2

Remarque :  EIJI YOSHIKAWA est l'auteur de "La Pierre et Le Sabre" et La Parfaite lumière retraçant la vie du plus célèbre des samouraïs japonais, Myamoto Musashi.
Décodage :

DIM PhraseEnClair$,cle$,PhraseCryptee$,LettreCle$,l$,i%,j%,l%,CodeLettrePhraseEnClair%,CodeLettreCle%,CodeLettrePhraseCryptee%,LongCle%,decalage%

PhraseCryptee$="MSUJGNBARBYEDEZHGMXXUMFDEWRKPXJNZSACBPRIZZFSNDDETUYCCLYIUWEUNWUCFIKLFO"
l%=LEN(PhraseCryptee$)
PhraseEnClair$=""
cle$="EIJIYOSHIKAWA"
LongCle%=LEN(cle$)
FOR i% = 1 To l%
    l$=MID$(PhraseCryptee$,i%,1)
    CodeLettrePhraseCryptee%=ASC(l$)
    IF LongCle%<l%
        j%=i%-int((i%-1)/LongCle%)*LongCle%
    ELSE
        j%=i%
    END_IF
    CodeLettreCle%=ASC(MID$(Cle$,j%,1))
    CodeLettreCle%=ASC(MID$(Cle$,j%,1))
    decalage%=CodeLettreCle%-64-j%
    CodeLettrePhraseEnClair%=CodeLettrePhraseCryptee%-decalage%
    IF CodeLettrePhraseEnClair%<65
        CodeLettrePhraseEnClair%=CodeLettrePhraseEnClair%+26
    END_IF
    IF CodeLettrePhraseEnClair%>90
        CodeLettrePhraseEnClair%=CodeLettrePhraseEnClair%-26
    END_IF
    PhraseEnClair$=PhraseEnClair$+CHR$(CodeLettrePhraseEnClair%)
NEXT i%
REM créer une autre fenêtre et y affiche un memo
form 1
memo 2 : parent 2,1
item_add 2, PhraseEnClair$
full_space 2

Le tout en Basic Panoramic...

Quant à Python, il faut savoir que c'est un langage où les variables sont typées dynamiquement, c'est à dire que tu n'as pas besoin de déclarer leur type comme en Basic Moderne en Pascal ou d'autres langages.
C'est un langage de Programmation libre et gratuit.
On peut le télécharger ici  http://www.python.org/download/ et cliquer sur la 3e ligne de lien : Python 2.6.1 Windows installer (Windows binary -- does not include source)
Premiers pas avec Python :
Téléchargement du livre de Gérard Swinnen au format .pdf : http://www.cifen.ulg.ac.be/inforef/swi/python.htm
Un lien pour d'autre liens de docs : http://python.developpez.com/

Python est modulaire, il possède une librairie graphique par défaut, TKinter, mais il y en a bien d'autres WxPython, PyGame, PyQt... Enfin, tu verras bien si tu mets le nez dedans. ;-)

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#31 03-01-2009 13:51:25

Lutcho74
Membre
Lieu : Vitrolles
Inscription : 22-12-2008
Messages : 136
Site Web

Re : [Basic puis Python] Programmer un un programme de crypt

Salut,
Je vais voir pour comprendre ton code mais dans un petit moment car les cour reprennnent dans 2 jours et faut que je bosse sinon sa va pas aller (bientôt épreuves commune -_- ).
En tout cas encore merci pour ton aide Yoshi.
Pour python, j'ai télécharger la version que tu ma conseiller et j'ai un piti peu essayé, je vais également lire attentivement la doc que tu m'a donné sa a vraiment l'aire intéressant =) .
Tout mais Meilleur Vœux au forum et a toi Yoshi :).

Bye Bye


La seule façon raisonnable de vivre en ce bas monde, c'est en dehors des règles.

Hors ligne

#32 03-01-2009 17:35:02

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

Re : [Basic puis Python] Programmer un un programme de crypt

Re,

Meilleurs voeux à toi aussi et à ceux qui nous liraient...
Ok !
Les deux seules réelles différences entre le codage fixe et le codage variable résident
1. Dans le calcul du décalage : decalage%=CodeLettreCle%-64-j% au lieu de decalage%=CodeLettreCle%-65
Rappel code ascii du A = 65 et j varie de 1 à la longueur de la clé, donc si j = 1 on a bien decalage%=CodeLettreCle%-65. Le décalage par rapport à B se fait pour j = 2 (code B : 66) d'où decalage%=CodeLettreCle%-66.
2. Le décalage peut devenir négatif avec ce système, donc non seulement la valeur de CodeLettreMessage%+decalage% peut être supérieure à 90 (code de Z), mais elle peut tout aussi bien être <65. Donc je dois dans le 1er cas soustraire 26, et dans le second ajouter 26 pour retourner entre A et Z...

Je tiens les scripts en Python (je les ai pas mal améliorés), correspondant à ceux ci-dessus en BASIC, à ta disposition pour une prochaine fois où tu auras du temps... Le boulot d'abord ! ;-)

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#33 03-01-2009 19:15:31

Lutcho74
Membre
Lieu : Vitrolles
Inscription : 22-12-2008
Messages : 136
Site Web

Re : [Basic puis Python] Programmer un un programme de crypt

Re,
Merci pour les explications.
Et en effet sa serai intéressant que j'ai les script en python pour pouvoir les comparer avec les scripts en panoramic.
A+


La seule façon raisonnable de vivre en ce bas monde, c'est en dehors des règles.

Hors ligne

#34 04-01-2009 11:32:56

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

Re : [Basic puis Python] Programmer un un programme de crypt

Salut,

Encore une particularité, agaçante au début, de Python : Indentation obligatoire !!!
Il est vivement conseillé d'utiliser 4 espaces obtenus avec la barre espace, pas avec la touche Tab.
Ne pas respecter une indentation rigoureuse c'est courir le risque
1. de se faire "jeter",
2. d'obtenir des résultats farfelus
Attention aussi que Python est sensible à la casse (Majuscules/Minuscules) : MessageEnClair n'est pas la même variable que MessageEnclair et mots-clé en minuscules...

Voilà le script (documenté) de cryptage variable.
Ouvrir l'interpréteur (clic x 2 sur l'icône sur le bureau)
Choisir File--> New Window
Copier Coller le Code ci-dessous (attention à l'indentation !)
Enregistrer avec l'extension .py
Puis Run et Run Module
Il s'agit de la première strophe des paroles de la chanson de Jacques Brel, "Aux Marquises". Cf http://fr.lyrics-copy.com/jacques-brel/ … quises.htm

#!/usr/bin/env python
# -*- coding: Latin-1 -*-

def prepare(PhraseEnClair):
    li1=["âà","éèêë","îï","ô","ûü","ç"]
    li2=["A","E","I","O","U","C"]
    i=0
    # Remplacement des caractères accentués éventuels
    for mot in li1:
       repl=li2[i]
       for lettre in mot:
           PhraseEnClair=PhraseEnClair.replace(lettre,repl)
       i+=1
       
    for lettre in " ',-;:!?. ":            # Suppression de la ponctuation et des espaces
        PhraseEnClair=PhraseEnClair.replace(lettre,"")
       
    PhraseEnClair=PhraseEnClair.upper() # Passage en majuscules
    return PhraseEnClair

Cle="EIJIYOSHIKAWA"
LongCle=len(Cle)
decalage=[]
Crypt=""
for i in range(LongCle):              # Calcul des décalages à appliquer et rangement dans un "tableau"
    decalage.append(ord(Cle[i])-65-i)
   
PhraseEnClair="Ils parlent de la mort comme tu parles d'un fruit \
Ils regardent la mer comme tu regardes un puits \
Les femmes sont lascives au soleil redouté \
Et s'il n'y a pas d'hiver, cela n'est pas l'été \
La pluie est traversière, elle bat de grain en grain \
Quelques vieux chevaux blancs qui fredonnent Gauguin \
Et par manque de brise, le temps s'immobilise \
Aux Marquises"
# Les \ ci-dessus permettent d'étaler sur plusieurs lignes

MessageClair=PhraseEnClair  # Je garde la trace du message d'origine avant retouches
PhraseEnClair=prepare(PhraseEnClair)
LongPhraseEnClair=len(PhraseEnClair)

for i in range(LongPhraseEnClair):
    l=ord(PhraseEnClair[i])
    if LongCle >= LongPhraseEnClair:
        j=i
    else:
        j=i%LongCle
        asc=l+decalage[j]
        Crypt+=chr(asc-26*(asc>90)+26*(asc<65))

# Préparation du meesage de sortie en groupes de 5 lettres séparés par une espace    
Coupes=LongPhraseEnClair/5-(LongPhraseEnClair%5==0)
for i in range(Coupes):
    # Ci-dessous : équivalent BASIC : MID$(Crypt$,i,5+6*i)+" "+MID$(Crypt$,5+6*i,LongPhraseEnClair-5-6*i)
    Crypt=Crypt[0:5+6*i]+" "+Crypt[5+6*i:LongPhraseEnClair]
    # Ci-dessous l'équivalent de LongPhraseEnClair=LongPhraseEnClair+1
    LongPhraseEnClair+=1
   
print "           Message d'origine :"   # non modifié
print MessageClair
print
print "           Message crypté :"
print Crypt

Et voilà son pendant, le script de décodage. Mêmes précautions.

#!/usr/bin/env python
# -*- coding: Latin-1 -*-

Cle="EIJIYOSHIKAWA"
LongCle=len(Cle)

MessageCrypte="MSZUU AXENU TPZET VWNLA MMFJF DEYSJ MMGNF SKTHM SZWYP MRDFD EZETL WWXYM EUKCS KHYIY BGNPV YEGPL ZKYVY ESTEY HPHZH CEQSA VIZZI PSWYM AUTFU EGMSU DUYMS DIYGS VJLQU WQSTQ QDZIA LQUYX UIFUD HXYHA YAEIE SUPZP LIFNM QGRBY YSRNY FCWCU EMGFS WCPJO GOHEW QFLFS HSWBC UIGHP RSUUJ HCSAU HKTBI AWFLV MNQVU OSFYP XYUQT ENFDG MTTTV RXISF QFLQH YVORE ES"
# Suppression de tous les espaces d'un coup avec stockage dans un autre conteneur
Crypt=MessageCrypte.replace(" ","")
l=len(Crypt)

# Initialisations
decalage=[]
MessageClair=""
asc=0

# Calcul du décalage et rangement dans un "tableau"
# ord() équivalent de ASC() du BASIC
for i in range(LongCle):
    decalage.append(ord(Cle[i])-65-i)

# Toute chaîne de caractères est en fait une liste (ndexée), un "tableau"
for i in range(l):
    CodeLettreCryptee=ord(Crypt[i]) # Extraction du code ASCII de chacune des lettres
    if LongCle>l:                   # Cas où la clé est plus longue que le message
        j=i
    else:
        j=i%LongCle                # Dans le cas contraire, j est égal au reste (symbole %) de i dans la division par LongCle
        asc=CodeLettreCryptee-decalage[j] # Code ASCII, non corrigé, de la lettre du message clair
        MessageClair+=chr(asc-26*(asc>90)+26*(asc<65)) # concaténation de chaque caractère correspondant au code corrigé

# Découpe du message de sortie en groupes de 5 caractères séparés par une espace
Coupes=l/5-(l%5==0)
for i in range(Coupes):
    MessageClair=MessageClair[0:5+6*i]+" "+MessageClair[5+6*i:l]
    l+=1                             # Autre façon d'écrire l=l+1

# Affichage du message d'origine non retouché
print "           Message crypté :"
print MessageCrypte
print

# Affichage du message décodé
print "           Message décrypté :"
print MessageClair
print

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#35 04-01-2009 13:41:47

Lutcho74
Membre
Lieu : Vitrolles
Inscription : 22-12-2008
Messages : 136
Site Web

Re : [Basic puis Python] Programmer un un programme de crypt

bonjour,

Merci beaucoup pour ces deux code je vais voir dès que je pourrrais pour les reproduire rien qu'en les lisant une fois pour vois se que j'ai compris et se qu'il faut que j'approfondisse.
Par contre a quoi sert les point entre deux mot par exemple dnas la boucle ci-dessus avec "PhraseEnClair=PhraseEnClair.replace(lettre,repl)" :

for lettre in mot:
           PhraseEnClair=PhraseEnClair.replace(lettre,repl)
       i+=1

Et comment faire pour extraire le code ASCII d'un seul caractère (soit léquivalent de ASC(A) en basic panoramic)? je faire l'inverse avec chr()...

A+
Encore merci


La seule façon raisonnable de vivre en ce bas monde, c'est en dehors des règles.

Hors ligne

#36 04-01-2009 14:13:22

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

Re : [Basic puis Python] Programmer un un programme de crypt

Bonjour,

Le . sert à appliquer une méthode (une "fonction") à un objet...
Il y a la méthode replace(caractèreoriginel,caractèredesubstitution). Je l'applique à l'objet PhraseEnClair.
Tu as ici un autre exemple :

PhraseEnClair=PhraseEnClair.upper()

En BASIC (Panoramic ou autre) PRINT ASC("A") retourne 65.  PRINT CHR$(90) --> affiche Z.
En Python, c'est print ord("A"). print chr(67) --> affiche C.

Tels quels, ces deux scripts fonctionneraient sous LINUX, alors que les scripts BASIC, non.

for mot in li1:
    for lettre in mot:

Parcourt un par un tous les mots de la liste li1.
Les deux points sont nécessaires pour indiquer au programme le début de la boucle. Appuyer sur ENTREE, derrière les deux points te renvoie à la ligne suivante avec une indentation de 4 espaces.
Puis j'extrais la lettre contenue dans chaque "mot".

for i in range(l):

Boucle d'index i qui parcourt toutes la valeurs de 0 à l-1. Si je voulais parcourir de 1 à l, je serais obligé d'écrire for i in range(1,l+1)
Autre point.
mot="LUTCHO74"
print len(mot) --> 8
print mot[0]---> L
print mot[7] --> 4

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#37 04-01-2009 17:48:05

Lutcho74
Membre
Lieu : Vitrolles
Inscription : 22-12-2008
Messages : 136
Site Web

Re : [Basic puis Python] Programmer un un programme de crypt

Re,
Est ce que tu pourrais mettre les script de cryptage et de décryptage sans la variable.
Merci d'avance


La seule façon raisonnable de vivre en ce bas monde, c'est en dehors des règles.

Hors ligne

#38 04-01-2009 18:13:27

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

Re : [Basic puis Python] Programmer un un programme de crypt

Re,

Ok !
Autre avantage des langages autres que le Basic Panoramic :
a=1.5
print 3+(a<2) --> renvoie 4
print 3+(a>2) --> renvoie 3

Codage avec décalage par rapport à la seule lettre A (changements très minimes, sur 3 lignes. Les verras-tu ?)

!/usr/bin/env python
# -*- coding: Latin-1 -*-

def prepare(PhraseEnClair):
    li1=["âà","éèêë","îï","ô","ûü","ç"]
    li2=["A","E","I","O","U","C"]
    i=0
    # Remplacement des caractères accentués éventuels
    for mot in li1:
       repl=li2[i]
       for lettre in mot:
           PhraseEnClair=PhraseEnClair.replace(lettre,repl)
       i+=1
       
    for lettre in " ',-;:!?. ":            # Suppression de la ponctuation et des espaces
        PhraseEnClair=PhraseEnClair.replace(lettre,"")
       
    PhraseEnClair=PhraseEnClair.upper() # Passage en majuscules
    return PhraseEnClair

Cle="EIJIYOSHIKAWA"
LongCle=len(Cle)
decalage=[]
Crypt=""
for i in range(LongCle):              # Calcul des décalages à appliquer et rangement dans tableau
    decalage.append(ord(Cle[i])-65)
   
PhraseEnClair="Ils parlent de la mort comme tu parles d'un fruit \
Ils regardent la mer comme tu regardes un puits \
Les femmes sont lascives au soleil redouté \
Et s'il n'y a pas d'hiver, cela n'est pas l'été \
La pluie est traversière, elle bat de grain en grain \
Quelques vieux chevaux blancs qui fredonnent Gauguin \
Et par manque de brise, le temps s'immobilise \
Aux Marquises"
# Les \ ci-dessus permettent d'étaler sur plusieurs lignes

MessageClair=PhraseEnClair  # Je garde la trace du message d'origine avant retouches
PhraseEnClair=prepare(PhraseEnClair)
LongPhraseEnClair=len(PhraseEnClair)
Cr=PhraseEnClair
for i in range(LongPhraseEnClair):
    l=ord(PhraseEnClair[i])
    if LongCle >= LongPhraseEnClair:
        j=i
    else:
        j=i%LongCle
        asc=l+decalage[j]
        Crypt+=chr(asc-26*(asc>90))

# Préparation du meesage de sortie en groupes de 5 lettres séparés par une espace    
Coupes=LongPhraseEnClair/5-(LongPhraseEnClair%5==0)
for i in range(Coupes):
    # Ci-dessous : équivalent BASIC : MID$(Crypt$,i,5+6*i)+" "+MID$(Crypt$,5+6*i,LongPhraseEnClair-5-6*i)
    Crypt=Crypt[0:5+6*i]+" "+Crypt[5+6*i:LongPhraseEnClair]
    # Ci-dessous l'équivalent de LongPhraseEnClair=LongPhraseEnClair+1
    LongPhraseEnClair+=1
   
print "           Message d'origine :"   # non modifié
print MessageClair
print
print "           Message crypté :"
print Crypt

Décryptage correspondant (pas plus de 3 lignes modifiées aussi :

#!/usr/bin/env python
# -*- coding: cp1252 -*-

Cle="EIJIYOSHIKAWA"
LongCle=len(Cle)

MessageCrypte="MTBXY FDLVD DALEU XZRQG TUOTQ PEZUM QRMUN BUETM TBZCU SYLON PLEUN ZACET MDUNE KIALC GMUXE IPSPM BNCAE LACOJ TPIBK GJWZI ESKLI QUZCR GBBOE PSMTW GYDSZ LRIRE VKNTY BWZBZ AOLIB NTYDD BQOEO TXZJD CFKPM BEALP MKIRR WNZKI JEROA IGBIB MVQQE WDRMS LUOMF AQXFT JVAGI BQPRA DSVWM LHYHC QUENI BYIPA SUYEE ZEFZR ACZWA MWPOS MUVWZ WDPAO AQXQI AYSWK LA"
# Suppression de tous les espaces d'un coup avec stockage dans un autre conteneur
Crypt=MessageCrypte.replace(" ","")
l=len(Crypt)

# Initialisations
decalage=[]
MessageClair=""
asc=0

# Calcul du décalage et rangement dans un "tableau"
# ord() équivalent de ASC() du BASIC
for i in range(LongCle):
    decalage.append(ord(Cle[i])-65)

# Toute chaîne de caractères est en fait une liste (ndexée), un "tableau"
for i in range(l):
    CodeLettreCryptee=ord(Crypt[i]) # Extraction du code ASCII de chacune des lettres
    if LongCle>l:                   # Cas où la clé est plus longue que le message
        j=i
    else:
        j=i%LongCle                # Dans le cas contraire, j est égal au reste (symbole %) de i dans la division par LongCle
        asc=CodeLettreCryptee-decalage[j] # Code ASCII, non corrigé, de la lettre du message clair
        MessageClair+=chr(asc+26*(asc<65)) # concaténation de chaque caractère correspondant au code corrigé

# Découpe du message de sortie en groupes de 5 caractères séparés par une espace
Coupes=l/5-(l%5==0)
for i in range(Coupes):
    MessageClair=MessageClair[0:5+6*i]+" "+MessageClair[5+6*i:l]
    l+=1

# Affichage du message d'origine non retouché
print "           Message crypté :"
print MessageCrypte
print

# Affichage du message décodé
print "           Message décrypté :"
print MessageClair
print

Sinon, tu as raison, ça c'est le principe du codage avec Masque jetable, mais c'est très proche de Vigenère.
@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#39 04-01-2009 20:13:41

Lutcho74
Membre
Lieu : Vitrolles
Inscription : 22-12-2008
Messages : 136
Site Web

Re : [Basic puis Python] Programmer un un programme de crypt

re,
Encore merci :)
Et oui c'est bien se que je penser pour le masque jetable mais pour vinegenère j'ai un peu des doutes...
Au niveau de python, plusieurs question, comment créer un .exe,comment créer un bouton tout simple et comment créer un zone ou l'on pourait écrire mais sans que se soit un input ou un raw_input ?
Et auriez vous un genre de programme pas trop compliquer a faire pour voir si j'y arrive car la je ne sais pas trop quoi faire...(j'ai fait un questionnaires sur les dates du programme de sixième que je risque d'avoir au brevet il corrige si c'est faux et continue si c'est juste...)


La seule façon raisonnable de vivre en ce bas monde, c'est en dehors des règles.

Hors ligne

#40 04-01-2009 20:42:46

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

Re : [Basic puis Python] Programmer un un programme de crypt

Ren

Mmmmm ! Pas trop compliqué qu'il dit...
Avec Python, tu es sur une autre planète.
Alors si, ça va être légèrement plus compliqué qu'en BASIC...
Dans le bouquin de Swinnen que tu as peut-être téléchargé, il y a des tas d'exemples simples et moins simples...
Un forum : http://www.developpez.net/forums/f96/au … thon-zope/
Tu veux passer au mode graphique tout de suite... Teste alors la bibliothèque standard Tkinter. Ecrire, pour la charger, au début de programme (3e ligne) :
from Tkinter import *

Je t'envoie par fichier attaché, ma première réalisation graphique qui date de deux mois (elle est mal écrite, d'ailleurs) via ma BAL de Yoshi :
Multiplication en base seize direct sans conversion à partir des tables de x et de +....

Pour fabriquer un exécutable, voir le programme annexe à installer dans Python Py2.exe, voir http://python.developpez.com/faq/?page=Py2exe

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#41 04-01-2009 22:39:56

Lutcho74
Membre
Lieu : Vitrolles
Inscription : 22-12-2008
Messages : 136
Site Web

Re : [Basic puis Python] Programmer un un programme de crypt

Salut,

yoshi a écrit :

Avec Python, tu es sur une autre planète.

Sa je les compris dès que j'ai comencer a visualiser des scrypt en python ^^
En tout cas merci pour les lien que tu m'a donné mais j'irai voir un peu plus tard(la j'y est jeter un coup d'oeil mais c'est tout) car niveau devoirs a mon avis sa va enchainer vue les épreuves communes qui approchent -_-
a+


La seule façon raisonnable de vivre en ce bas monde, c'est en dehors des règles.

Hors ligne

#42 17-01-2009 10:24:31

Lutcho74
Membre
Lieu : Vitrolles
Inscription : 22-12-2008
Messages : 136
Site Web

Re : [Basic puis Python] Programmer un un programme de crypt

Salut,
Est ce que tu pourrais me donnait le code source le plus simple possible de cryptage en python car je ne comprend pas très bien les codes que tu m'a donné
a+

Dernière modification par Lutcho74 (17-01-2009 10:27:18)


La seule façon raisonnable de vivre en ce bas monde, c'est en dehors des règles.

Hors ligne

#43 17-01-2009 17:29:37

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

Re : [Basic puis Python] Programmer un un programme de crypt

Salut,

t'as de la veine, je suis de retour chez moi depuis hier soir...
Bon j'ai repris les deux scripts de codage et décodage par masque avec la seule lettre A et les ai simplifié (élagué) au maximum.
Les voici.
Cryptage.

#!/usr/bin/env python
# -*- coding: cp1252 -*-

Cle="VICTORHUGO"
LongCle=len(Cle)
Crypt=""
   
PhraseEnClair="Lutcho est de retour sur les forums BibMath."
lg = len(PhraseEnClair)
MessageClair=""
for i in range(lg):
    l=PhraseEnClair[i]      # Extraction de la lettre n° i de la phrase en Clair
    if l<>"'" and l<>" " and  l<>"-" and l <>"," and l<>".":
        MessageClair=MessageClair+l
LongMessageClair=len(MessageClair)
MessageClair=MessageClair.upper()

for i in range(LongMessageClair):
    l=ord(MessageClair[i])  # Code ascii de la mettre n° i
    j=i%LongCle             # Position de la lettre dans la clé sans dépasser la longueur de la Clé
    decalage=ord(Cle[j])-65 # calcul du décalage à appliquer
    asc=l+decalage          # Code ASCII obtenu après ajout dy décalage
    if asc > 90:
        asc=asc-26          # Si code > 90 (code de Z), on enlève 26
    Crypt=Crypt+chr(asc)    # Ajout de la lettre cryptée dans le messsage de sortie
   
print "           Message d'origine :"
print PhraseEnClair
print
print "           Message crypté :"
print Crypt

Résultat : GCVVVFLMZRZZGMCLYMAFGMUYCIBGYPDJOTHY

Décryptage.

#!/usr/bin/env python
# -*- coding: cp1252 -*-

Cle="VICTORHUGO"
LongCle=len(Cle)  
PhraseCryptee="GCVVVFAOZOXKTHQYLMISNBEXELPFLOPB"
LongPhraseCryptee=len(PhraseCryptee)
MessageClair=""

for i in range(LongPhraseCryptee):
    l=ord(PhraseCryptee[i])  # Code ascii de la i + 1 eme lettre de la phrase cryptée (i-ème position)
    j=i%LongCle              # Position de la lettre dans la clé sans dépasser la longueur de la clé
    decalage=ord(Cle[j])-65  # Calcul du décalage qui a été appliqué
    asc=l-decalage           # Code ASCII de la lettre en clair après soustracxtion du décalage
    if asc<65:               # Rectification du code ASCII si celui-ci est < 65 (code de A)
        asc=asc+26
    MessageClair=MessageClair+chr(asc)  # Ajout de la lettre dans le message de sortie
   
print "           Message d'origine :"
print MessageClair
print
print "           Message crypté :"
print PhraseCryptee

Résultat : différent de la phrase de départ au dessus. Ca te fera une surrise.

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#44 17-01-2009 19:18:57

Lutcho74
Membre
Lieu : Vitrolles
Inscription : 22-12-2008
Messages : 136
Site Web

Re : [Basic puis Python] Programmer un un programme de crypt

Re,
Merci de m'avoir simplifier ce code en faite pour le code de décryptage il y a une vague ressemblance avec celui en basic Panoramic.
Qu'est ce que : for i in range(lg):
Je sais que c'est une boucle mais je ne comprend pas le petit passage souligné.

Pour "répondre" a ton message crypter, sais se que je fait et lundi je vais aller voir la personne qui gère le réseau du collège car on m'a dit qu'avant de travailler pour mon collège il bosser dans une entreprise donc je pense qu'il doit s'y connaitre en programmation en python.
Y a t-il une commande en python qui pourrait donné le code hexadécimal d'un caractère ?


à part : Que signifie ta signature (je connais sa traduction et sa signification général mais pourquoi avoir mit sa?)


La seule façon raisonnable de vivre en ce bas monde, c'est en dehors des règles.

Hors ligne

#45 17-01-2009 20:20:57

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

Re : [Basic puis Python] Programmer un un programme de crypt

Salut,

C'est l'équivalent du BASIC : FOR i = 0 TO lgl-1
Si je veux aller de 1 (par exemple) à lg-1 : for i in range(1,lg):
range c'est une sorte de liste (au sens mathématique) de nombres.

Oui.
La commande hex(nombre).
print hex(65)   --> 0x41   0x est un préfixe annonçant le code hexadécimal. 4 --> 16 * 4 d'où 16*4+4 = 64+1 = 65
print hex(125) --> 0x7d                                                                           7 --> 16 * 7 d'où 16*7+13 = 112+13 = 125
Donc pour le code hexa d'un caractère, chercher le code décimal via ord(), puis conversion :
print ord("A") --> 65 mais print hex(ord("A")) --> 0x41   

Arx Tarpeïa Capitoli Proxima : Il n'y a qu'un pas du Capitole à la Roche Tarpéïenne.
A Rome : Capitole siège du pouvoir, Roche Tarpéîenne : on y balançait de son sommet les condamnés.
Et il n'y a qu'un pas au sens propre, mais aussi au sens figuré de l'un à l'autre. Même pour un puissant, il est vite fait de se retrouver  au "mauvais" endroit.
Ici, j'ai un certain pouvoir : je suis modo. Je ne me prends pas pour autant au sérieux tout en étant sérieux dans ce rôle...
Et en outre, je réponds aux questions (et je râle après ceux qui ne fatiguent pas assez voire pas du tout à mon goût) parce que j'ai (encore) un bon niveau, mais je reste conscient que
1. Il y a meilleur que moi (et comment !)
2. Je peux me tromper aussi (ça m'est arrivé et d'ailleurs ça me fout en rogne après moi ensuite...).
Donc là aussi, je ne me prends pas pour un dieu vivant...
Montaigne, l'auteur des Essais, avait dit d'ailleurs au XVIe s de façon plaisante : << Au plus haut trône du monde, on n'est jamais assis que sur son cul !>> (sic)

Voilà fin de ma minute philosophique. Satisfait ?

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#46 18-01-2009 22:23:24

Lutcho74
Membre
Lieu : Vitrolles
Inscription : 22-12-2008
Messages : 136
Site Web

Re : [Basic puis Python] Programmer un un programme de crypt

Bonsoir,

Je ne sais pas se que veut dire "lg-1" je ne suis qu'en troisième...Est ce que tu pourrais me l'expliquer brièvement STP...

Pour ton petit point philo c'est rechercher :)
Je ne connaissait pas l'expression de Montaigne elle me plait bien ^^

PS : Je pense mettre bientôt au jour des petits programme en python sur les fonctions affine est ce que je pourrais mettre mais script sur ce forum étant donné qu'il y a un rapport avec les maths...?


La seule façon raisonnable de vivre en ce bas monde, c'est en dehors des règles.

Hors ligne

#47 19-01-2009 08:30:25

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

Re : [Basic puis Python] Programmer un un programme de crypt

Bonjour,

Là tu m'en bouches un coin...
Si tu regardes le code, tu trouves :
lg = len(PhraseEnClair)
Donc ça veut dire que j'ai décidé d'appeler lg (j'aurais pu l'appeler Lutcho) la longueur de la phrase en clair. Ici, avec mon exemple lg = 44.
Et donc lg - 1 = 44 - 1 = 43
Les boucles en Python commencent à zéro par défaut. De 0 à 43 (soit lg-1) il y a 44 nombres.
Attention encore :
mot="ILNEFAUTPASCHERCHERMIDIAQUATORZEHEURES"
longueur=len(mot)
print mot[1] ---> L
La 1ere lettre a le numéro 0 : print mot[0] --> I

for i in range(longueur):
    print mot[i],

affiche toutes les lettres sur la même ligne, séparées par une espace :
I L N E F A U T P A S C H E R C H E R M I D I A Q U A T O R Z E H E U R E S H E U R E S

On peut obtenir le même résultat sans connaître la longueur :
for lettre in mot:
    print lettre,

Si lettre ne te plaît pas, tu peux choisir un autre  nom de variable...

@+

PS : aujourd'hui la citation de Montaigne fait réagir. Pourtant, à l'époque (XVIe s), le mot employé n'avait pas la connotation grossière et vulgaire qu'il a aujourd'hui. Pour avoir une idée plus juste, remplace-le par le mot postérieur...


Arx Tarpeia Capitoli proxima...

Hors ligne

#48 19-01-2009 17:55:36

Lutcho74
Membre
Lieu : Vitrolles
Inscription : 22-12-2008
Messages : 136
Site Web

Re : [Basic puis Python] Programmer un un programme de crypt

Salut,
J'ai vraiment était c** sur ce coup, j'ai plutôt chercher la fonction mathématiques que la variable :o, j'ai honte...
Donc si j'ai bien compris..."range(lg):" veut dire jusqu'à la variable lg(qui est un nombre obligatoirement...)
Merci pour ton exemple, et pour ceux qui ne savent pas d'où vient le "i" il faut lui prédéfinir la valeur 0 avant la boucle dans cette exemple...

A+

PS: Pour Montaigne ne tant fait pas c'est la citation qui me plait et non la (mini) grossièreté :)


La seule façon raisonnable de vivre en ce bas monde, c'est en dehors des règles.

Hors ligne

#49 19-01-2009 19:27:14

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

Re : [Basic puis Python] Programmer un un programme de crypt

Salut,

Si je pouvais tenter une traduction française en langage clair, à la place de :
for i in range(lg):
je dirais :
parcourir tous les nombres (entiers) i de la liste de 0 à lg et sortir de la boucle à la valeur lg sans l'utiliser.
Il n'y a pas besoin de prédéfinir la valeur 0 dans la boucle, si tu ne précises pas, la liste démarre à 0.
Ce n'est que si tu ne veux pas démarrer à 0, mais à 1 par exemple que tu vas le préciser :
for i in range(1,4):
    print i,

va te donner 1, 2, 3.

Dans les BASIC où une boucle FOR est terminée par NEXT, si tu essayes ça
FOR i = 1 TO 3
PRINT i,
NEXT
Tu obtiens aussi 1 2 3..
Si après NEXT, tu tapes de nouveau PRINT i, c'est 4 qui va s'afficher...
Pourquoi ?
Parce que le prg compte :
i=1.
j'affiche i
je repars pour un tour,
i=2.
Est-ce que 2 > 3  ? ---> Non. J'affiche i
Je repars pour un tour
i=3.
Est-ce que 3 > 3  ? ---> Non. J'affiche i
Je repars pour un tour
i=4.
Est-ce que 4 > 3  ? ---> Oui. Je sors de la boucle...

C'est l'équivalent de :
i=1
while i < 4:
    print i,
    i+=1

En BASIC Panoramic ça donnerait :
DEF i%
i%=1
WHILE i% < 4
PRINT i
i%=i%+1
END_WHILE

Ca c'est une boucle "Tant que"
Tant que i < 4 alors augmente i de 1, puis affiche i...
Au passage, la supériorité de la machine sur le bonhomme, c'est sa capacité à répéter 10 fois, 100 fois, 1000 fois... la même séquence (sans faute) et à une vitesse incomparablement supérieure.

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#50 19-01-2009 21:34:09

Lutcho74
Membre
Lieu : Vitrolles
Inscription : 22-12-2008
Messages : 136
Site Web

Re : [Basic puis Python] Programmer un un programme de crypt

Re,
La majorité de ce que tu a écrit je le connaissait mais j'étais comme quelqu'un qui savait que 5x2=10 maintenant je sais que 5x2=2+2+2+2+2=10,
en bref je faisait quelque chose sans savoir précisément comment sa marcher donc merci :)   
(je connaissait le fonctionnement d'un boucle mais pas comme tu me la expliqué ^^).

Tu ne ma pas répondue à la question que j'ai mit dans le message 46, donc je te la "repose", est ce que si je fait des programmes sur les fonctions affines par exemple,
donc qui a un rapport avec les maths pourrais-je le posté sur autre sujet sur une autre rubrique...?
(sa serait pour les utilisateurs de python qui n'aiment pas faire certains petit calcul à la main...)

Tchao

PS: Je vais faire un pause au niveau de la prog car la semaine prochaine j'ai les épreuves communes et il faut que j'assure, il se peu donc que je ne réponde pas directement a ta réponse.


La seule façon raisonnable de vivre en ce bas monde, c'est en dehors des règles.

Hors ligne

Réponse rapide

Veuillez composer votre message et l'envoyer
Nom (obligatoire)

E-mail (obligatoire)

Message (obligatoire)

Programme anti-spam : Afin de lutter contre le spam, nous vous demandons de bien vouloir répondre à la question suivante. Après inscription sur le site, vous n'aurez plus à répondre à ces questions.

Quel est le résultat de l'opération suivante (donner le résultat en chiffres)?
onze plus zéro
Système anti-bot

Faites glisser le curseur de gauche à droite pour activer le bouton de confirmation.

Attention : Vous devez activer Javascript dans votre navigateur pour utiliser le système anti-bot.

Pied de page des forums