public BruteForcer(String[] params, String[] crackedPassword, int currentThreadIndex, int numThreads, CountDownLatch[] latches, ExecutorService exec){
		this.readyLatch = latches[0];
		this.startLatch = latches[1];
		this.doneLatch = latches[2];
		this.exec = exec;
		this.crackedPassword = crackedPassword;
		this.offset = BigInteger.valueOf(currentThreadIndex);
		this.threads = BigInteger.valueOf(numThreads);
		
		this.count = 0;
		
		
		this.charSet = params[1].toCharArray(); 				//[1] string of charset 
		Arrays.sort(this.charSet);
		this.min = new BigInteger(params[2]);					//[2] starting numeric value
		this.max = new BigInteger(params[3]).add(this.min);		//[3] number of guesses to make
		this.currentGuessNum = this.min.add(this.offset);
		
		switch(CrackType.valueOf(params[0])){					//[0] type of CrackType
			case JDBC:
				if (params.length == 8)
					this.crackExecutor = new JDBCCracker(params[4], params[5], params[6], params[7]);
																//[4]username 
																//[5]JDBCURL
																//[6]JDBC driver class name 
																//[7]statement to make if successfully connected
				else
					System.err.println("Incorrect number of parameters for JDBC Cracking");
				break;
				
			case HASH:
				if (params.length == 7)
					this.crackExecutor = new HashCracker(params[4], params[5], params[6]);
																//[4]algorithm
																//[5]hashed value
																//[6]optional salt value 
				else
					System.err.println("Incorrect number of parameters for HASH Cracking");
				break;
				
			case PRPCHTTP:
				if (params.length == 8)
					this.crackExecutor = new PRPCHTTPCracker(params[4], params[5], params[6], params[7]);
																//[4]username 
																//[5]hostname 
																//[6]port number
																//[7]PRPC activity
				else
					System.err.println("Incorrect number of parameters for HTTP Cracking");
				break;
				
			case HTTP:
				System.err.println("pure HTTP unsupported at this time");
				break;
				
			default:
				System.err.println("Unsupported Crack Type");
				break;
		}
		
		this.currentGuess = createCharArray(this.min, this.charSet);
	}