Domanda

Voglio trovare (non generare) 2 stringhe di testo in modo tale che, dopo aver rimosso tutte le non lettere e ucasing, una stringa possa essere tradotta nell'altra con una semplice sostituzione.

La motivazione di ciò deriva da un progetto che ho conosciuto e che sta testando metodi per attaccare i cypher tramite distribuzioni di probabilità. Vorrei trovare un testo semplice ampio e coerente che, una volta crittografato con un semplice codice di sostituzione, possa essere decrittografato in qualcos'altro che sia anche coerente.

Questo finisce in 2 parti, trova le stringhe più lunghe in un corpus e ottieni quel corpus.


La prima parte mi sembra suscettibile di una sorta di attacco con un albero a B bloccato dalla stringa dopo una sostituzione che rende sequenziale la sequenza delle prime occorrenze.

HELLOWORLDTHISISIT
1233454637819a9b98

Una piccola ottimizzazione basata sulla conoscenza del valore massimo e della lunghezza della stringa in base a ciascuna profondità dell'albero e il resto è solo codifica.


L'altra parte sarebbe un po 'più coinvolta; come generare un grande corpus di testo da cercare? una sorta di ragno internet sembrerebbe l'approccio ideale in quanto avrebbe accesso alla più grande quantità di testo, ma come ridurlo al solo testo?

La domanda è; Qualche idea su come farlo meglio?


Modifica: la cifra che veniva usata è una cifra di sostituzione di 26 lettere follemente base.

P.S. questo è più un esperimento mentale che un probabile progetto reale per me.

È stato utile?

Soluzione

Ce ne sono 26! cifre di sostituzione diverse. Questo funziona a poco più di 88 bit di scelta:

>>> math.log(factorial(26), 2)
88.381953327016262

L'entropia del testo inglese è almeno qualcosa come 2 bit per carattere. Quindi mi sembra che non ci si possa ragionevolmente aspettare di trovare passaggi di oltre 45-50 caratteri che sono accidentalmente equivalenti in sostituzione.

Per il grande corpus, c'è il Progetto Gutenberg e Wikipedia, per cominciare. Puoi scaricare un dump di tutti i file XML di Wikipedia in inglese dal loro sito Web.

Altri suggerimenti

Penso che stai chiedendo un po 'troppo per generare una sostituzione che sia anche "coerente". Questo è un problema di intelligenza artificiale per l'algoritmo di crittografia per capire quale testo è coerente. Inoltre, più lungo è il testo e più complicato sarà creare un "coerente". risultato ... si avvicina rapidamente a un punto in cui è necessaria una "chiave" fintanto che il testo che stai crittografando. In tal modo sconfiggendo lo scopo di crittografarlo affatto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top