Per essere sicuro di aver ben compreso le Rainbow Table, ho deciso di fare un piccolo progetto in Java, ma sono bloccato su una domanda: come scegliere la dimensione della catena? E questo darà il numero di linee per ottenere una buona percentuale di copertura
Immagina di usare la dimensione della password =6
e lo spazio 0123456789
, le possibilità sono 1 000 000
(le dimensioni e lo spazio sono bassi perché è più facile allenarsi e fare il debug, in un grande spazio sarebbe più difficile, aspetto avere qualcosa che funzioni per provare su più grande)
Come faccio a scegliere tra:
- 4000 catene di dimensioni 250
- 1000 catene di 1000
- 400 catene di dimensioni 2500
- ...
Sto usando sha1
in hash, e per ridurre prendo le 6 prime cifre e aggiungo un valore index
(deriva dal ciclo della catena)
public static String reduce(String hash, BigInteger spaceSize, int passSize, int indexFunction) {
int v = BigInteger.valueOf((Long.parseLong(hash.replaceAll("\D", "").substring(0, passSize), 10) + indexFunction)).mod(spaceSize).intValueExact();
DecimalFormat format = new DecimalFormat("000000");
return format.format(v);
}