Povedl se Vám nečekaně cenný úlovek - získali jste do rukou zadání testů z PJV. Bohužel, tyto testy jsou uzavřeny v sejfu s elektronickým zámkem. K tomuto zámku dokážete připojit svůj počítač, pomocí kterého můžete zkoušet různá hesla. Jednou z metod prolamování hesel je intuitivní tzv. brute force attack, tedy útok hrubou silou. Při této metodě útočník zkouší postupně všechny možné kombinace znaků, dokud neuhodne heslo.
Domácí úkol sestává ze tříd Test, Thief a BruteForceAttacker
. Vy budete pracovat pouze se třídou BruteForceAttacker
. Zde doplňte kód do metody public void breakPassword(int sizeOfPassword)
, který se pokusí prolomit heslo o délce sizeOfPassword
(heslo je dlouhé přesně zadaný počet znaků, tedy ani kratší ani delší). K dispozici máte následující metody:
char[] getCharacters()
tato metoda vrací seznam znaků z jejichž podmnožiny je složeno heslo
boolean tryOpen(char[] password)
tato metoda zkusí otevřít sejf. Pokud se podaří vypíše hlášku a vrací true
, jinak false
. Jakmile je sejf otevřen, již není třeba se snažit dále. Navíc, pokud budete dále zkoušet jiná hesla, sejf se opět zamkne.
void breakPassword(int sizeOfPassword)
nebude rekurzivní a bude volat jinou metodu, která již rekurzivní bude.
Váš algoritmus si můžete otestovat. Viz kód ve třídě Test.java
. V tomto kódu se sejf nastaví na heslo abcdaaaddb
a množina znaků na {'a', 'b', 'c', 'd'}
. Podle tohoto vzoru si můžete vyzkoušet i jiná hesla.
BruteForceAttacker.java
(zabalený v archivu), který obsahuje vaše řešení.