Dolfo91
Utente Attivo
- 69
- 3
- CPU
- Intel (R) Core (TM) 2 Duo E6400
- Scheda Madre
- Cuba MS-7301
- HDD
- 320 GB
- RAM
- 2048 MB
- GPU
- ATI Radeon HD 4670
- OS
- Windows XP Media Center Edition
Scusatemi ragazzi, ma non riesco a capire perchè sono stati più volte citati in questa discussione i numeri fattoriali quando a mio umile avviso non hanno niente a che fare con l'argomento in questione. Vi spiego il perchè (qualora vi fosse qualche errore vi prego di farmelo notare): prendendo ad esempio come dominio di riferimento il sistema dei numeri decimali, in una stringa numerica lunga un sola cifra si possono avere 10 risultati differenti ossia 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Se invece prendessimo in esame una stringa numerica lunga due cifre, avremmo 100 risultati differenti ovvero da 00 = 0 a 99. Nel primo caso la quantità corrisponde a 10^1 mentre nel secondo 10^2. Come già scritto in qualche post precedente, il tutto si può generalizzare con la formula m^n, dove con n si indica la lunghezza della stringa e con m la quantità di tutti i caratteri utilizzati all'interno della stringa. Nello script da me scritto, m = 62: comprende tutte le lettere dell'alfabeto (26) maiuscole e minuscole più tutti i numeri decimali. Lo stesso script genera tutte le possibili stringhe lunghe 3 caratteri ovvero 62^3 = 238.328 combinazioni. Da queste ultime elimina, inoltre tutte le combinazioni in cui vi sono due caratteri vicini identici: considerando tale condizione, eccetto il primo componente che è libero di stampare tutti i 62 caratteri possibili, tutti gli altri possono stamparne ognuno eccetto quello presente nella componente precedente, quindi 61. Il mio script genera quindi (61^2)*62 = 230.702. La frequenza di generazione delle stringhe quindi equivale a 230.702 / 15 sec. = 15.380 al secondo; naturalmente, questo rate è legato alle capacità computazionali della mia macchina che è abbastanza datata. Stampandone 15.400 al secondo, arrotondando per eccesso, la mia macchina, quindi, per stampare tutte le possibili stringhe da 10 caratteri, ossia (61^9)*62 = 7,25*10^17, avrebbe bisogno di 47.080.328.425.695 secondi. Da questa cifra, con gli stessi calcoli da te effettuati, si ricava quella cifra tendente al 1,5 milioni che ho citato sopra. Sicuramente i più recenti processori sono in grado di elaborare molti più dati nello stesso lasso temporale ma anche se fossero in grado di generare ipoteticamente 1 milione di stringhe al secondo - quasi 65 volte la mia macchina - ci vorrebbero comunque 23 mila anni circa per concludere l'esecuzione dello script. Tempistiche assurde, in ogni caso.esatto.
per il calcolo, mi hai detto che per 3 caratteri il sistema impiega 15 secondi a calcolare 6 possibili combinazioni, giusto? quindi per calcolare una combinazione il sistema impiega 2.5sec (=15/6). fin qui
dovrebbe essere tutto chiaro.
una stringa di 10 caratteri genera 10! combinazioni,
ovvero detto in altri termini 10×9×8×7×6×5×4×3×2x1
=3628800 combinazioni. Il
tempo unitario era 2.5sec; quindi 3628800×2.5
=9072000 sec e' il tempo
totale. Si esegue quindi una conversione, dunque 9072000/60(sec)/60(min)/24(ore) si ottengono 105 giorni.
In realta' contiene dei grossi errori ed e' un tempo molto
sovrastimato perche':
- nei 15 secondi che il sistema impiega per trovare 3 soluzioni il sistema compie delle azioni di contorno (es. allocazione memoria, trasferimento dati dalla memoria alla cpu, comunizioni del dato all'output...). Il tempo che la cpu effettivamente impiega ad effettuare il calcolo sara' non so di 6 sec forse;
- il tempo poi sicuramente dipende dalla cpu (marca, modello e tecnologia di funzionamente)
- c'e' poi da considerare che tutte le moderne cpu non funzionano sempre a pieno regime, ma per la maggiorparte del tempo funzionano in modalita' di risparmio energetico, ma se esegui un applicativo pesante il sistema attinge al resto dei core che non usa o aumenta la frequanza a seconda del tipo, in soldoni il tempo di calcolo si riduce a 3 sec. quindi 0,5 sec per combinazione. Rifacendo il calcolo ti vengono 21 giorni.
Attenzione pero' che io ho sparato dei numeri... che comunque cosi' a occhio sinceramente mi pare sempre molto esagerato. Il funzionamento di una cpu moderna e' molto molto complesso.
Quei 15 sec con quale linguaggio l'hai ottenuto? per avere dei paragoni hai rieseguito un programma in C?
Ecco perchè una semplice password di 8-10 caratteri con qualche lettera maiuscola e numero è ritenuta già molto robusta.
Ultima modifica: