• Un code

    J'ai trouvé, je sais pas trop comment, un code que je trouve sympa, mais c'est un peu technique donc je vous en veux pas si vous trouvez ça chiant, si au contraire vous voulez des explications sur certains points, hésitez pas à demander.
    Le truc c'est que la plupart des codes simples peuvent être craqués simplement en analysant le nombre et la fréquence des lettres (par exemple dans un texte un peu long, la lettre apparaissant le plus est forcément un 'e' (sauf si il s'agit d'un texte de Perec)), donc je cherchais un moyen de crypter un texte sans en conserver ni le nombre ni la fréquence d'apparition de ses lettres.
    L'idée de base c'est d'associer à chaque lettre un nombre correspondant à sa position dans l'alphabet et de multiplier, pour chaque mot, chacune des lettres le composant : ainsi le mot 'code' devient 3x15x4x5, soit 900.
    Mais ce système présente un désavantage de décryptage majeur : il est impossible, en partant de 900, de savoir si il s'agissait au départ de 3x15x4x5, 'code', ou de '15x12x5', 'olé', par exemple.
    Un moyen de contourner le problème consiste à associer un nombre premier à chaque lettre : chaque nombre a une unique décomposition en facteurs premiers (c'est d'ailleurs pour ça qu'on les appelle des nombres premiers), on est donc certain, lors de la phase de décryptage, des lettres composant le mot. Reste le problème de la commutativité : on peut changer l'ordre des facteurs sans affecter le produit, mais on ne peut pas en dire autant des mots, dont la disposition des lettres influe sur le sens, mais je vois pas trop comment y remédier, donc on aura une phase de résolution d'anagramme lors du décryptage.
     Bon donc associons chaque lettre à un nombre premier : on prends tout d'abord les 26 premiers nombres premiers, de 2 à 101, et on associe le n-ième nombre premier à la n-ième lettre de l'alphabet, comme ceci :
      

    un code
    (désolé il manque la première colone 2-A)

    Le problème de cette méthode c'est qu'un mot un peu long peut générer des nombres énormes : par exemple 'pastèque' deviens 53x2x67x71x11x59x73x11, soit 262.784.205.574 : c'est pas catastrophique mais on passe, pour écrire 'pastèque', de 8 à 12 caractères... En fait, les 26 premiers nombres premiers étant, en moyenne, compris entre 10 et 100, soit 10^1 et 10^2, chaque lettre d'un mot est en gros un produit de 10^1,5 : c'est à dire que chaque lettre multiplie en moyenne la taille du mot codé par 1,5. Pour éviter de devoir envoyer des messages super longs on va faire deux trucs :
    D'abord, on va classer les lettres non plus dans l'ordre alphabétique, mais en fonction de leur fréquence d'apparition, des plus utilisées au plus rares, et leur associer les nombres premiers dans cette ordre :

    un code


    Ainsi 'pastèque' deviens 43x3x7x17x2x71x29x2, soit seulement
    126.430.836 : on utilise déjà 3 caractères de moins !
    La seconde idée pour réduire le nombre de caractère va ajouter une couche finale de complexité : on va simplement écrire le nombre obtenu après les étapes précédentes en base 26, en utilisant les lettres de l'alphabet comme symboles (en associant à chaque lettre la valeur correspondant à sa place dans l'alphabet, moins 1 (parce qu'il nous faut un 0)). Cela devrait achever de transformer complètement la physionomie de notre mot de départ : avec une lettre on peut écrire des nombres jusqu'à (26^1)-1= 25, avec 2 lettres on va jusqu'à
    (26^2)-1= 675, avec 3 jusqu'à (26^3)-1=17.575, avec 4 jusqu'à (26^4)-1=456.976, etc...   La plupart des mots devront donc faire entre 3 et 6 lettres.
    Finissons par exemple de coder 'pastèque' :
    126.430.836 est compris entre 26^5 et (26^6)-1, il est donc écrivable en 6 lettres.
             126.430.836 = 10x26^5 + 16x26^4 + 17x26^3 + 9x26^2 + 22x26^1 + 12x26^0
    D'où 126.430.836 =kqrjwm en base 26.

    De cette manière il ne reste presque aucune indication apparente sur notre mot de départ : sa taille a été complètement transformée, et la disposition de ses lettres n'a rien à voir avec celle qu'il avait précédemment.


  • Commentaires

    1
    Mardi 27 Juin 2017 à 10:46

    Dvtpy eapi !

     

    2
    Mardi 27 Juin 2017 à 13:01

    Eokwk gk r bvi

      • Mardi 27 Juin 2017 à 22:11

        je suis touché que mon code serve à communiquer des messages aussi importants

    3
    Mardi 27 Juin 2017 à 22:10

    fbvrn d dszx mk icde !

    Je trouve ça plus amusant à décoder perso (y a des sites permettant de trouver la décomposition en facteur premiers d'un nombre)

      • Mardi 27 Juin 2017 à 23:01

        Df'p jfzxqha mh bqkmfcyza dxn Phuy rnqn ceejvna bi fdyllhaa kwkyktbraq ! #BKGPUN (Nio ongr)

      • Samedi 1er Juillet 2017 à 00:52

        bah franchement bravo, j'avais envisagé de faire un truc similaire mais j'ai eu la flemme >.<
        Je suis vraiment content que ça t'ai plus, surtout que j'y croyais vraiment pas trop (au code, je veux dire)
        Y a certains mots que je trouve vraiment sympa, conne fdyllhaa ou kwkyktbraq... et le BKGPUN j'ai mis pas mal de temps à résoudre l'anagramme (couille ovaire) (c'est comme un pull over mais en vulgaire)

    Suivre le flux RSS des commentaires


    Ajouter un commentaire

    Nom / Pseudo :

    E-mail (facultatif) :

    Site Web (facultatif) :

    Commentaire :