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

Répondre

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)?
vingt sept plus trente six
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.

Retour

Résumé de la discussion (messages les plus récents en premier)

gatha
05-10-2009 20:20:54

bonsoir
ce sujet est passionant, en l'occurence, il me rappelle le système de codage allemand
"Enigma". destiné essentiellement aux U-Boats.
Sa force résidait dans le fait qu'il est "facile" de décoder en fonction de la fréquence d'apparition des lettres.
En français, par exemple, on repère vite le E car c'est la lettre la plus usitée.
Enigma, par un simple jeu de rouleaux de décalage, codait chaque lettre différement selon sa fréquence au sein du message. Ainsi je tape un a, apparaît un nb. je retape un a c'est un autre nb qui s'affiche.
Je crois savoir que les systèmes de codage US st basés sur les nombres premiers.
quelqu'un en sait-il plus?
Bonne soirée à tous et Semper en dabant!

Lutcho74
20-05-2009 12:26:14

Salut,

A oui j'avais pas penser à ça....
Merci pour ta réponse, j'aurais appris un nouveau truc avec python :-)

@+

yoshi
19-05-2009 21:01:30

Salut,


Alphabet.find(car) te renvoie la position (en partant de 0) du caractère car dans la chaine Alphabet.
Alphabet.find(car) est donc un nombre entier...
Lance Python.
En mode console tu tapes :
>>> Alphabet="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
>>> car = "I"
>>> Alphabet.find(car)
Et tu obtiens 8...

@+

Lutcho74
19-05-2009 20:39:34

Salut,

Bon je me "ré-incruste" un peu dans le sujet mais c'est juste pour dire merki à Barbichu(pour le Rubicon) et a yoshi(pour les explications)  :-)

@+

[edit] Voilà j'ai lu le code python juste après avoir posté le message (oui c'est stupide ^^''), et y a un truc que je comprend pas :

rangch=(Alphabet.find(car)+decalage)%26

Cette ligne se trouve juste après un else d'une condition qui se trouve dans la boucle de codage ; bon, j'ai compris que tu rechercher le caractère "car" dans l'alphabet avec le .find mais je ne pige pas trop comment tu peux additionné une variable string avec un nombre(12) mais je pense avoir mal compris...

yoshi
19-05-2009 10:16:01

Salut,

OK !

Essaie quand même le script Visual Basic  pour savoir si ça marche vraiment...
Et puis, pour le fun, on mettra le script de décryptage...

@+

Genki
19-05-2009 00:57:33

Bonjour

Je viens au nouvelle, c'est cool de vous êtes autant dévoué à m'accorder votre temps sur ce sujet, malheureusement, suite au blocage de ma FAC, la prof à carrément annulé le projet ><

Tant pis, mais merci pour tout quand même !
Laisser quand même le sujet ouvert on ne sais jamais ^^

Genki.

yoshi
18-05-2009 14:34:14

Bonjour,

Voilà la variante Python de l'algo de cryptage de Cesar, avec la même problématique et en collant au plus près du script Visual Basic :

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

A_Coder="AVE CESAR MORITURI TE SALUTANT"
Alphabet="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
decalage = 12
Phrase_Codee=""
Talpha=[]
for i in xrange(26):
    Talpha.append(Alphabet[i])

longueur=len(A_Coder)
for i in xrange(longueur):
    car=A_Coder[i]
    if car==" ":
       Phrase_Codee+=" "
    else:
        rangch=(Alphabet.find(car)+decalage)%26
        Phrase_Codee+=Talpha[rangch]
print
print "                     Phrase à coder :"
print A_Coder
print
print "        Phrase codée avec un décalage de 12 :"
print Phrase_Codee

Résultat :

        Phrase à coder :
AVE CESAR MORITURI TE SALUTANT

        Phrase codée avec un décalage de 12 :
MHQ OQEMD YADUFGDU FQ EMXGFMZF

@+

yoshi
17-05-2009 20:15:55

Hey Lutcho,

C'est un peu comme en Basic Panoramic : il faut déclarer le type des tableaux (et leur taille), et des variables...
Integer : nombre entier relatif
String : qui contient des caractères non numériques...

Ce travail était un exercice imposé, regarde ici les conditions imposées à Genki :
http://www.acyrin.com/sujet-projet-09-cesar.PDF,
on y parle notamment de ce Talpha qui t'intrigue...
Pour moi, Talpha = contraction de Tableau+Alphabet...

@+

Barbichu
17-05-2009 19:59:20

Lut,
http://fr.wikipedia.org/wiki/Rubicon
La première section de l'article devrait te permettre de tout comprendre.
++

Lutcho74
17-05-2009 19:40:54

Lu,

Désolé mais j'ai une question qui n'a aucun rapport direct avec le code :
    -qu'est ce qu'un "Rubicon"
Et sinon pour le code il est facilement compréhensible sauf je comprend pas trop dans les Dim les "As" après une variable à quoi servent-ils(serai-ce pour dire quelle style de variable elle est?), et "Talpha(26)" à quoi servent les parenthèses et le 26(je pense que c'est les lettre de l'alphabet mais je ne comprend pas le fonctionnement...)???

@+

yoshi
17-05-2009 10:44:10

Bonjour,

Notre ami Genki n'ayant pas redonné signe de vie, probablement  terrassé par les légions de Jules Cesar, n'a donc peut-être pas pu, lui, franchir son Rubicon...
Pour ceux que ça intéresse, voici donc, brut de décoffrage (non testé : je n'ai pas VB, mais je serais surpris qu'il ne fonctionne pas) : le petit script VB de codage selon l'algorithme de Cesar :

Dim Alphabet, PhraseEnClair, PhraseCodee,  Caractere As String
Dim decalage, rang, rangch, i, Longueur As Integer
Dim Talpha(26) As String

Alphabet= "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
For i = 0 To  25
    Talpha(i) = Mid(Alphabet,i,1)
Next i

PhraseEnClair = "AVE CESAR MORITURI TE SALUTANT"
PhraseCodee = ""
Longueur = Len(PhraseEnClair)-1
decalage = 12

For i = 0 To Longueur
    caractere = Mid(PhraseEnClair,i,1)
    If caractere = " " Then
        PhraseCodee = PhraseCodee + " "
    Else
        rang = InStr(1,Alphabet,caractere)
        rangch = (rang + decalage) Mod 26
        PhraseCodee = PhraseCodee + Talpha(rangch)
Next i

MsgBox(PhraseCodee)

Réactions ?

@+

yoshi
12-05-2009 07:42:54

Bonjour,

Oui, ce n'est pas simple si ce n'est pas prévu...
Pourquoi ?
Un tableau est géré par des indices numériques, ainsi si tu demandes Talpha[2] tu obtiens C..
Mais on peut pas gérer un tableau via des lettres, sauf en Python où  tu peux construire un "dictionnaire" de telle façon que Dico["C"] te renvoie 2...
En VB, je l'ignore...

De toutes façons, j'ai trouvé un moyen de contourner la difficulté.
Donc :
Puisque la fonction INSTR existe en QuickBaic, en TurboBasic et en Basic Amstrad, il n'y a aucune raison qu'en VB cette fonction INSTR n'existe pas...
Elle marche comme ça : INSTR("GINGEMBRE","M") donne 5. Vérification si tu demandes MID("GINGEMBRE",5,1) tu obtiens bien M...
Donc, si ça existe, je crée une variable chaîne Alphabet$ :
Alphabet$="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Et dès que tu as récupéré la lettre et testé que ce n'est pas une espace (donc dans la partie ELSE), tu obtiens le rang de ta lettre, non plus par rang=ASC(lettre$)-65, mais par rang=InStr(Alphabet$,lettre$)
Après, on continue comme indiqué.

Alors où en es-tu ? Tu avances j'espère parce que le temps presse !

[EDIT] Je viens de Chercher sur Google : la réponse est oui, cette fonction existe... alors au boulot !

@+

PS
Lorsque tu auras écrit ton prg et qu'il marchera, puisque tu dois faire des commentaires, tu pourras leur expliquer qu'on peut se passer d'écrire rangch=(rang+decalage)Mod 26...
Il suffit d'utiliser un 2e tableau TalphaX2 qui va contenir 52 lettres A, B....Z, A, B....Z, ainsi tu seras sûr de tomber sur la bonne lettre rangch=rang+decalage puis TalphaX2[rangch]. Quant aux décalages gauche/ou droite, c'est facile à gérer :
* pour gauche on prend une boucle qui va de 26 à la fin
* pour droite on va de 0 à 25 (ou 26 ça dépend du VB en Python pour décrire 26 itértations de 0 à 25, il faut donner un indice de fin de 26 et non 25).

PS2
Apparemment, après recherche, la boucle For/Next  fonctionne comme dans les BASICs que je connais.
Donc ce n'est plus Longueur=len(Acoder$), mais Longueur=len(Acoder$)-1, puisque la boucle démarre de 0 :
For i = 0 To Longueur

Donc tu commences par déclarer Alphabet$="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Avec une première boucle, tu remplis Talpha :
For i = 0 To 25
Talpha[i]=Mid(Alphabet$,i,1)
Next i
Tu déclares ensuite PhraseCodee$="" et Acoder$="AVE CESAR MORITURI TE SALUTANT"
Puis Longueur=len(Acoder$)-1
Et enfin tu lances ta 2e boucle :
For i = 0 To Longueur
     lettre$=Mid(Acoder$,i,1)
    If...
         ...
    Else....
         ....
         ....
         ....
Next i

Et écriture du résultat obtenu PhraseCodée$

PS3
Je viens de simuler en Python les instructions que je t'ai données, sauf le InStr qui n'existe pas (mais je l'ai remplacé par son équivalent : find), ça colle :

                     Phrase à coder :
AVE CESAR MORITURI TE SALUTANT

        Phrase codée avec un décalage de 12 :
MHQ OQEMD YADUFGDU FQ EMXGFMZF

Genki
12-05-2009 01:24:56

En effet, ce n'est pas écrit, en revanche c'est un détail qui a été dit oralement =/
Mais c'est difficile de faire ce que j'ai dit ?

A = 1
B = 2
etc...

?

Ensuite on chance la valeur de chaque lettre (+le décalage) et on les affiche à nouveaux

nan ?

yoshi
11-05-2009 19:17:35

Salut,

Pour te répondre, notre prof nous interdit d'utiliser leur valeur ASCII =(

Peux-tu préciser ?
Tu n'as pas le droit d'extraire la valeur ASCII d'une lettre ? C'est ça ? Boufre ! Ca c'est ch...
En Python, aucun pb on a les dictionnaires, mais je ne connais pas le VBE  (je me documente), il faut donc trouver une astuce pour savoir que la lettre A correspond au n° défini (l'inverse de ton tableau Talpha, quoi).
Je vais rejeter un oeil sur ton lien, donc...

@+

[EDIT]
Il n'est pas précisé que le code ASCII est interdit sur les pages en lien...

Genki
11-05-2009 19:04:11

Ouah ! Pas mal ! Sa va bien m'aider ça.

Pour te répondre, notre prof nous interdit d'utiliser leur valeur ASCII =(
Mais on a le droit de donner une valeur numérique à chaque lettre

A => 1
B => 2
x => n
Z => 26

Pied de page des forums