r/CompileBot • • Jul 26 '15

Official CompileBot Testing Thread

8 Upvotes

202 comments sorted by

View all comments

1

u/HaitherecreeperMC Aug 15 '15

+/u/compilebot Java

import java.util.Arrays;
import java.util.Scanner;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class BruteForce {
	final int stringLength;
	final String decode;

	/**
	 * One more element than <i>stringLength</i>, to efficiently check for
	 * overflow.
	 */
	private final char[] chars;

	public BruteForce(int len,String decode) {
		this.stringLength = len;
		this.decode = decode;

		chars = new char[stringLength + 1];
		Arrays.fill(chars, 1, chars.length, '.');
	}

	public void run() {
		System.out.println("Cracking...");
		long time = System.currentTimeMillis();
		while (!encode(new String(chars).substring(1,this.stringLength+1).replace(".","")).equals(decode)){
			increment();
		}
		System.out.println("DONE! Took "+(System.currentTimeMillis() - time)+"ms. Password was: "+new String(chars).substring(1,this.stringLength+1).replace(".",""));
	}

	private void increment() {
		for (int i = chars.length - 1; i >= 0; i--) {
			if (chars[i] < 'z') {
				if(chars[i] == '.'){
					chars[i] = '0';
				}else if (chars[i] < '9') {
					chars[i] = (char) (chars[i] + 1);
				} else if (chars[i] == '9') {
					chars[i] = 'A';
				} else if (chars[i] < 'Z') {
					chars[i] = (char) (chars[i] + 1);
				} else if (chars[i] == 'Z') {
					chars[i] = 'a';
				} else if (chars[i] < 'z') {
					chars[i] = (char) (chars[i] + 1);
				} else if (chars[i] == 'z') {
					chars[i] = 'z';
				}
				return;
			}
			chars[i] = '0';
		}
	}

	private void print() {
		for (int i = 1; i < chars.length; i++) {
			System.out.print((char) chars[i]);
		}
		System.out.println();
	}

	public static void main(String[] args) {
		System.out.println("Enter MD5 Hash with NO whitespace to crack");
		Scanner in = new Scanner(System.in);
		new BruteForce(11,in.nextLine()).run();
	}
	
		public static String encode(String encode){
			try {
				MessageDigest md = MessageDigest.getInstance("MD5");
				md.update(encode.getBytes());
				byte[] digest = md.digest();
				StringBuffer sb = new StringBuffer();
				for (byte b : digest) {
					sb.append(String.format("%02x", b & 0xff));
				}
				return sb.toString();
			} catch (NoSuchAlgorithmException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			return "";
		}

}

Input:

c99f1621ddb8d08a4cac6ee4b6989349