Ho realizzato un piccolo esempio di generazione e composizione stringa a partire da caratteri e simboli presenti nella codifica ASCII dalla posizione 32 (spazio) alla 126 ~ (tilde) compresi.
Si può scegliere il numero di caratteri da calcolare e scegliere la composizione.
Le combinazioni ottenute sono facilmente calcolabili pari al numero di caratteri composizione elevato al numero di caratteri scelti, nel nosro caso con tutti i caratteri (numeri, simboli, maiuscoli, minuscoli) con solo 3 caratteri si arriva alla bellezza di 857375 combinazioni!
Questo mi fa venire in mente la scena di WarGames con il computer che tentava di indovinare la password per lanciare i missili, a parte la fandonia di dire che un particolare carattere della password era corretto (un baco che affliggeva il primo netbios) calcolare l'intera combinazione di 10 caratteri (CPE1704TKS) usando solo caratteri maiuscoli e numeri comporta la bella cifra di 3,65615844006298E+15 un numero veramente spropositato di tentativi impossibile per i computers del 1983 anche avendo a disposizione un Univac.
La funzione ricorsiva di calcolo stringhe
void Combinazioni(string valore, int posizione)
{
int x = posizione;
if (x >= valore.Length)
return;
char c = valore.Substring(posizione,1).ToCharArray()[0];
int k = caratteriAmmessi.IndexOf(c);
if (k < 0)
k = 0;
for (int i = k; i < caratteriAmmessi.Length; i++)
{
// trasformazione della stringa in array di bytes
byte[] b = System.Text.Encoding.ASCII.GetBytes(valore);
// sostituzione del carattere posizionato
b[x] = (byte) caratteriAmmessi.Substring(i,1).ToCharArray()[0];
string txt = System.Text.Encoding.ASCII.GetString(b);
if (txt != valore)
{
sb.Append(txt);
sb.Append(Environment.NewLine);
}
// richiamo della funzione ricorsiva
Combinazioni(txt,x + 1);
}
}
Nessun commento:
Posta un commento