Vous recevez une chaîne chiffrée, chiffrée à l'aide d'un chiffrement de substitution très simple.
Problème
Vous ne savez pas quel est le chiffre, mais vous savez que le texte chiffré est l'anglais et que les lettres les plus fréquentes en anglais sont etaoinshrdlucmfwypvbgkqjxz dans cet ordre. Les seuls caractères autorisés sont les lettres majuscules et les espaces. Vous pouvez effectuer une analyse de base - à partir de lettres simples, mais vous pouvez migrer vers une analyse multi-lettres plus complexe - par exemple, U suit presque toujours Q, et seules certaines lettres peuvent apparaître deux fois de suite.
Exemples
clear : SUBMARINE TO ATTACK THE DOVER WAREHOUSE AND PORT ON TUESDAY SUNRISE
cipher: ZOQ DUPAEYSRYDSSDXVYSHEYNRBEUYLDUEHROZEYDANYKRUSYRAYSOEZNDMYZOAUPZE
clear : THE QUICK BROWN FOX BEING QUITE FAST JUMPED OVER THE LAZY DOG QUITE NICELY
cipher: TNAEPDHIGEMZQJLEVQBEMAHL EPDHTAEVXWTEODYUASEQKAZETNAERXFCESQ EPDHTAELHIARC
clear : BUFFALO BUFFALO BUFFALO BUFFALO BUFFALO BUFFALO BUFFALO
cipher: HV WRPDHV WRPDHV WRPDHV WRPDHV WRPDHV WRPDHV WRP
Défis
Voyez si vous pouvez décrypter le texte dans chacun de ces chiffres:
SVNXIFCXYCFSXKVVZXIHXHERDXEIYRAKXZCOFSWHCZXHERDXBNRHCXZR RONQHXORWECFHCUH
SOFPTGFIFBOKJPHLBFPKHZUGLSOJPLIPKBPKHZUGLSOJPMOLEOPWFSFGJLBFIPMOLEOPXULBSIPLBP
KBPBPWLIJFBILUBKHPGKISFG
TMBWFYAQFAZYCUOYJOBOHATMCYNIAOQW Q JAXOYCOCYCHAACOCYCAHGOVYLAOEGOTMBWFYAOBFF
ACOBHOKBZYKOYCHAUWBHAXOQW XITHJOV WOXWYLYCU
FTRMKRGVRFMHSZVRWHRSFMFLMBNGKMGTHGBRSMKROKLSHSZMHKMMMMMRVVLVMPRKKOZRMFVDSGOFRW
J'ai les matrices de substitution et le texte clair pour chacun, mais je ne les révélerai que si cela devient trop difficile ou si quelqu'un ne le comprend pas.
La solution qui peut décrypter le plus de messages avec succès est le gagnant. Si deux solutions sont également bonnes, elles seront décidées par décompte des voix.
la source
Réponses:
Python
J'ai trouvé toutes les phrases secrètes, mais je ne les posterai pas ici. Exécutez le code si vous vous en souciez.
Le code fonctionne en choisissant un caractère espace, en énumérant toutes les substitutions possibles pour chaque mot, puis en recherchant des substitutions compatibles. Il permet également à certains mots hors lexique de traiter les fautes d'orthographe dans le texte clair :)
J'ai utilisé un grand lexique (~ 500K mots) de http://wordlist.sourceforge.net/ .
la source
PHP (incomplet)
Il s'agit d'une solution PHP incomplète qui fonctionne en utilisant les informations de fréquence des lettres dans la question plus un dictionnaire de mots assortis d'expressions régulières basées sur les lettres les plus fiables du mot donné.
À l'heure actuelle, le dictionnaire est assez petit mais avec l'expansion appropriée, je prévois que les résultats s'amélioreront. J'ai envisagé la possibilité de correspondances partielles, mais avec le dictionnaire actuel, cela entraîne une dégradation plutôt qu'une amélioration des résultats.
Même avec le petit dictionnaire actuel, je pense que je peux dire en toute sécurité ce que le quatrième message code.
la source