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)?
soixante seize plus soixante deux
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)

faivre
02-03-2014 16:01:14

pouvez vous m'aider à décrypter ce message qui m'a été envoyé par mon chéri
(ancien casque bleu)

Jm tnjdtjg agp pjdmpe xjnjaatg jgjejlg dtjbon

yoshi
11-01-2013 21:37:40

RE,

Procéder par input me demanderait pour "faire propre" un traitement d'erreurs... et rallongerait le code : je n'en ai pas eu envie.
Voilà avec une ligne de code en plus, qui vous permettra d'utiliser le "Chiffre de Beaufort" :
- variante "normale". J'ai ajouté le "témoin" Variante :  le mettre à 1 : Variante = 1
- variante "allemande". Mettre le "témoin" Variant à -1 : Variante = -1
La raison

Pour Beaufort normal, on fait chiffré = clé-clair, pour la variante allemande clair-clé, l'opposé.
J'ai écrit ce code pour le Beaufort normal d'où la multiplication par -

J'ai simplement ensuite ajouter la multiplication de l'écart calculé par le Variante. C'est tout.


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

def prepare(PhraseDepart):
    li1=["âà","éèêë","îï","ô","ûü","ç"]
    li2=["A","E","I","O","U","C"]
    # Remplacement des caractères accentués éventuels
    for i,mot in enumerate(li1):
       repl=li2[i]
       for lettre in mot:
           PhraseDepart=PhraseDepart.replace(lettre,repl)  
    for lettre in " ',-;:!?. ":            # Suppression de la ponctuation et des espaces
        PhraseDepart=PhraseDepart.replace(lettre,"")
    PhraseDepart=PhraseDepart.upper()    # Passage en majuscules
    return PhraseDepart
.
Cle="COMPLEXE"
# ***************************************************************
Variante=-1 # 1 : chiffre de Beaufort normal ; -1 : variante allemande
# ***************************************************************
LongCle=len(Cle)
MessageTraite=""
alpha=[chr(65+i) for i in xrange(26)]
   
PhraseDepart="FELIC ITATI ONSVO USAVE ZREUS SIADE CHIFF RERCE CODEV OUSTR OUVER EZLEL IEUET LACAC HEAUX COORD ONNEE SSUIV ANTES NORDC INQUA NTEDE GRESQ UARAN TECIN QPOIN TSIXC ENTNE UFETE STDEU XDEGR ESVIN GTDEU XPOIN TCINQ CENTQ UARAN TEQUA TREBO NNECH ASSE"
# Les \ ci-dessus permettent d'étaler le texte sur plusieurs lignes

MessageDepart=PhraseDepart  # Je garde la trace du message d'origine avant retouches
PhraseDepart=prepare(PhraseDepart)
LongPhraseDepart=len(PhraseDepart)

for i,lt in enumerate(PhraseDepart):
    ecart = ((ord(Cle[i%LongCle])-ord(lt))%26)*Variante
    MessageTraite+=alpha[ecart]

print

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

Résultat du codage

XKBHJ WEEJG YCTJJ KKORL MNTKK WEPIA VXUJH YHNVA AAJLQ QDMJX YVQAG ADDIE DADAJ DMNLC QACUP NXQGB OBZLH MFKUT MCSAF ROXJN DRHKC BTLIA RNYWW VLNXR JKKHY OIQUB TXDHV APVZL RZTLY WTMHK ABYIV LTJPR WVJLR HIQUB TNDRH CYBTZ REGEP VIZRE ENYNY CYAVX CWUL

*
Il est bien différent du précédent...

@+

yoshi
10-01-2013 16:18:39

Bonjour  à tous,

Suite aux éclaircissements  - définitifs - apportés pour ce message, j'ai écrit un petit programme de codage/décodage (puisque le système est réversible) de tout message.


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

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

Cle="COMPLEXE"
LongCle=len(Cle)
MessageTraite=""
alpha=[chr(65+i) for i in xrange(26)]
   
PhraseDepart="XKBHJ WEEJG YCTJJ KKORL MNTKK WEPIA VXUJH YHNVA AAJLQ QDMJX\
YVQAG ADDIE DADAJ DMNLC QACUP NXQGB OBZLH MFKUT MCSAF ROXJN DRHKC BTLIA\
RNYWW VLNXR JKKHY OIQUB TXDHV APVZL RZTLY WTMHK ABYIV LTJPR WVJLR HIQUB\
TNDRH CYBTZ REGEP VIZREE NYNYC YAVXC WUL"

# Les \ ci-dessus permettent d'étaler le texte sur plusieurs lignes

MessageDepart=PhraseDepart  # Je garde la trace du message d'origine avant retouches
PhraseDepart=prepare(PhraseDepart)
LongPhraseDepart=len(PhraseDepart)

for i,lt in enumerate(PhraseDepart):
    ecart= (ord(Cle[i%LongCle])-ord(lt))%26
    MessageTraite+=alpha[ecart]
print

# Préparation du message de sortie en groupes de 5 lettres séparés par une espace    
Coupes=LongPhraseDepart/5-(LongPhraseDepart%5==0)
for i in range(Coupes):
    # Ci-dessous l'équivalent de LongPhraseDepart=LongPhraseDepart+1
    LongPhraseDepart+=1
   
print "           Message d'origine :"   # non modifié
print MessageDepart
print
print "           Message traité :"
print MessageTraite
   
 

Résultat :

Message d'origine :
XKBHJ WEEJG YCTJJ KKORL MNTKK WEPIA VXUJH YHNVA AAJLQ QDMJXYVQAG ADDIE DADAJ DMNLC QACUP NXQGB OBZLH MFKUT MCSAF ROXJN DRHKC BTLIARNYWW VLNXR JKKHY OIQUB TXDHV APVZL RZTLY WTMHK ABYIV LTJPR WVJLR HIQUBTNDRH CYBTZ REGEP VIZREE NYNYC YAVXC WUL

           Message traité :
FELIC ITATI ONSVO USAVE ZREUS SIADE CHIFF RERCE CODEV OUSTR OUVER EZLEL IEUET LACAC HEAUX COORD ONNEE SSUIV ANTES NORDC INQUA NTEDE GRESQ UARAN TECIN QPOIN TSIXC ENTNE UFETE STDEU XDEGR ESVIN GTDEU XPOIN TCINQ CENTQ UARAN TEQUA TREBO NNECH ASSE

Ainsi qu'expliqué par Fred ici, sans modifications, mettre le code obtenu en sortie à la place de la phrase de départ permet de retouver le message codé.

@+

Pied de page des forums