enCoderr / app.py
Enoder's picture
Update app.py
bb51d3c verified
Raw
History Blame Contribute Delete
3.85 kB
import streamlit as st
import random
import string
# Generate a unique random character for each letter of the alphabet
def generate_variable_mapping():
letters = string.ascii_letters # Includes both lowercase and uppercase 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):
# Encrypt the plaintext using the variable mapping
return "".join(mapping.get(char, char) for char in plaintext)
# Helper words list with common French words for each alphabet letter
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()) # Get unique letters from plaintext
helper_phrase = []
# Generate five words for each unique letter in the plaintext
for letter in unique_letters:
letter_upper = letter.upper()
if letter_upper in helper_words:
selected_words = random.sample(helper_words[letter_upper], 5) # Select 5 random words
helper_phrase.extend(selected_words)
# Join the helper phrase into a single string
helper_phrase_str = " ".join(helper_phrase)
# Encrypt the entire helper phrase using the same variable mapping
encrypted_helper_phrase = encrypt_text(helper_phrase_str, mapping)
return encrypted_helper_phrase
# Streamlit App
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).")
# User input
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)
# Display the encrypted text and helper phrase
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.")