| import streamlit as st |
| import random |
| import string |
|
|
| |
| def generate_variable_mapping(): |
| letters = string.ascii_letters |
| shuffled_characters = list(set(string.ascii_letters + string.digits + string.punctuation)) |
| random.shuffle(shuffled_characters) |
|
|
| variable_mapping = {} |
| for letter in letters: |
| variable_mapping[letter] = shuffled_characters.pop() |
|
|
| return variable_mapping |
|
|
| def encrypt_text(plaintext, mapping): |
| |
| return "".join(mapping.get(char, char) for char in plaintext) |
|
|
| |
| helper_words = { |
| 'A': ["salade", "banane", "flamme", "chaise", "carafe"], |
| 'B': ["bison", "cabine", "blouse", "abri", "bonbon"], |
| 'C': ["cerise", "cactus", "canard", "chaud", "cirque"], |
| 'D': ["dinde", "décor", "donner", "douleur", "début"], |
| 'E': ["pêche", "mercredi", "effet", "plage", "épice"], |
| 'F': ["fête", "fleur", "framboise", "frère", "façade"], |
| 'G': ["groupe", "gagne", "galerie", "grille", "guerre"], |
| 'H': ["histoire", "hasard", "hiver", "homme", "horizon"], |
| 'I': ["étudier", "milieu", "jardin", "écrire", "grill"], |
| 'J': ["jaune", "jupe", "joli", "jambe", "jouet"], |
| 'K': ["kilo", "kiwi", "kangourou", "kermesse", "kayak"], |
| 'L': ["lumière", "lien", "lire", "loup", "lait"], |
| 'M': ["mère", "mignon", "monde", "musique", "moulin"], |
| 'N': ["nuage", "nuit", "nommer", "neige", "nourrir"], |
| 'O': ["orange", "origine", "opéra", "objet", "ombrelle"], |
| 'P': ["poire", "piano", "pluie", "parc", "porte"], |
| 'Q': ["quatre", "qualité", "quitte", "queue", "quart"], |
| 'R': ["rose", "rire", "réveil", "route", "réponse"], |
| 'S': ["soleil", "salle", "sourire", "sombre", "salut"], |
| 'T': ["table", "téléphone", "tigre", "tarte", "triste"], |
| 'U': ["univers", "unité", "unique", "urgent", "utile"], |
| 'V': ["vache", "valise", "visage", "vitrine", "vendre"], |
| 'W': ["wagon", "weekend", "whisky", "web", "watt"], |
| 'X': ["xénon", "exemple", "toxique", "fox", "lux"], |
| 'Y': ["yeux", "yo-yo", "yacht", "yeti", "yogourt"], |
| 'Z': ["zèbre", "zone", "zinc", "zodiac", "zigzag"] |
| } |
|
|
| def generate_helper_phrase(plaintext, mapping): |
| unique_letters = set(char for char in plaintext if char.isalpha()) |
| helper_phrase = [] |
|
|
| |
| for letter in unique_letters: |
| letter_upper = letter.upper() |
| if letter_upper in helper_words: |
| selected_words = random.sample(helper_words[letter_upper], 5) |
| helper_phrase.extend(selected_words) |
|
|
| |
| helper_phrase_str = " ".join(helper_phrase) |
| |
| |
| encrypted_helper_phrase = encrypt_text(helper_phrase_str, mapping) |
|
|
| return encrypted_helper_phrase |
|
|
| |
| st.title("Chiffrement par Substitution") |
| st.write("Ce système remplace chaque lettre d'un texte par un caractère aléatoire de la même catégorie (voyelle/consonne).") |
|
|
| |
| plaintext = st.text_input("Entrez le texte à chiffrer:", "Exemple de texte") |
|
|
| if st.button("Chiffrer"): |
| mapping = generate_variable_mapping() |
| ciphertext = encrypt_text(plaintext, mapping) |
| helper_phrase = generate_helper_phrase(plaintext, mapping) |
|
|
| |
| st.write("Texte chiffré:") |
| st.code(ciphertext, language="") |
|
|
| st.write("Phrase d'aide:") |
| st.code(helper_phrase, language="") |
|
|
| st.write("Note: Utilisez la phrase d'aide pour déduire les correspondances des lettres.") |
|
|