import java.util.*;
import java.io.*;
import org.jasypt.util.password.BasicPasswordEncryptor;

public class DictionaryAttack
{ 
  public static void main(String[] args) throws IOException
  {
    BasicPasswordEncryptor passwordEncryptor = new BasicPasswordEncryptor();
    final String encryptedPassword = "d0XHpQ6X+DvTuI6e13vVpCw5mj1l5wc/";
    
    //String encryptedPassword = passwordEncryptor.encryptPassword(userPassword);
    System.out.println("Enter user password: ");
    Scanner input = new Scanner(System.in);
    String userPassword = input.next();
    
    if (passwordEncryptor.checkPassword(userPassword, encryptedPassword)) 
    {
      System.out.println("Correct!");
    } 
    else 
    {
      System.out.println("Incorrect!");
    }
    
    System.out.println("Attempting to break password: ");
    File text = new File("6of12.txt");
    input = new Scanner(text);
    
    String possibles = "!abcdefghijklmnopqrstuvwxyz01234567890";
    
    long count=0;
    for (int i0=0; i0<possibles.length(); i0++)
      for (int i1=0; i1<possibles.length(); i1++)
      for (int i2=0; i2<possibles.length(); i2++)
      for (int i3=0; i3<possibles.length(); i3++)
      for (int i4=0; i4<possibles.length(); i4++)
      for (int i5=0; i5<possibles.length(); i5++)
      for (int i6=0; i6<possibles.length(); i6++)
      for (int i7=0; i7<possibles.length(); i7++)
    {
      userPassword = "";
      if (possibles.charAt(i0) != '!') userPassword = userPassword + possibles.charAt(i0);
      if (possibles.charAt(i1) != '!') userPassword = userPassword + possibles.charAt(i1);
      if (possibles.charAt(i2) != '!') userPassword = userPassword + possibles.charAt(i2);
      if (possibles.charAt(i3) != '!') userPassword = userPassword + possibles.charAt(i3);
      if (possibles.charAt(i4) != '!') userPassword = userPassword + possibles.charAt(i4);
      if (possibles.charAt(i5) != '!') userPassword = userPassword + possibles.charAt(i5);
      if (possibles.charAt(i6) != '!') userPassword = userPassword + possibles.charAt(i6);
      if (possibles.charAt(i7) != '!') userPassword = userPassword + possibles.charAt(i7);
      
      if ((count++ % 1000) == 0) System.out.print("."+userPassword+".");
      
      if (passwordEncryptor.checkPassword(userPassword, encryptedPassword)) 
      {
        System.out.println("\nPassword is: " + userPassword);
        break;
      }
      
    }

      
    
    count=0;
    while (input.hasNext())
    {
      if ((count++ % 100) == 0) System.out.print("."+userPassword.charAt(0)+".");
      
      userPassword = input.next();
      if (passwordEncryptor.checkPassword(userPassword, encryptedPassword)) 
      {
        System.out.println("\nPassword is: " + userPassword);
        break;
      }
    }
    
  }
}