2023-10-24 14:29:41 +11:00
|
|
|
import java.io.*;
|
2023-10-23 18:50:45 +11:00
|
|
|
import java.security.NoSuchAlgorithmException;
|
|
|
|
import java.security.SecureRandom;
|
|
|
|
import java.util.Random;
|
|
|
|
public class guesser {
|
|
|
|
public static void main(String[] args) throws NoSuchAlgorithmException {
|
|
|
|
System.out.println("Guessing hash of a random 6 digit password");
|
|
|
|
Random random = new Random();
|
|
|
|
int seed= random.nextInt(1000000);
|
|
|
|
String randomPassword = getRandomPassword(seed);
|
|
|
|
System.out.println("Random 6-character string: " + randomPassword);
|
|
|
|
|
|
|
|
System.out.println("Hashed password");
|
|
|
|
String hashed = hash.hashstring(randomPassword);
|
|
|
|
System.out.println(hashed);
|
|
|
|
|
|
|
|
System.out.println("Guessing...");
|
|
|
|
long startTime = System.nanoTime();
|
|
|
|
|
|
|
|
|
|
|
|
boolean match = false;
|
|
|
|
int check=0;
|
2023-10-24 14:29:41 +11:00
|
|
|
// Check hash table
|
|
|
|
try{
|
|
|
|
BufferedReader reader = new BufferedReader(new FileReader("hashtable.txt"));
|
|
|
|
String line;
|
|
|
|
int lineNumber = 0;
|
|
|
|
|
|
|
|
while ((line = reader.readLine()) != null) {
|
|
|
|
lineNumber++;
|
|
|
|
if (line.contains(hashed)) {
|
|
|
|
System.out.println("Match!");
|
|
|
|
System.out.println("Password is: " + line.split("\\$")[0]);
|
|
|
|
}
|
2023-10-23 18:50:45 +11:00
|
|
|
}
|
2023-10-24 14:29:41 +11:00
|
|
|
} catch (IOException e) {
|
|
|
|
e.printStackTrace();
|
2023-10-23 18:50:45 +11:00
|
|
|
}
|
|
|
|
|
2023-10-24 14:29:41 +11:00
|
|
|
|
2023-10-23 18:50:45 +11:00
|
|
|
long endTime = System.nanoTime();
|
|
|
|
long duration = (endTime - startTime);
|
|
|
|
// Calculate the time taken in seconds
|
|
|
|
double seconds = (double)duration / 1_000_000_000.0;
|
|
|
|
System.out.println("Time taken: " + seconds + " seconds");
|
|
|
|
|
|
|
|
System.out.println("Guessing hash of a random 6 digit password with salt");
|
|
|
|
System.out.println("Hashed password");
|
|
|
|
String salt = bytetohex.toHexString(saltedHash.getSalt());
|
|
|
|
// Remove starting 0s
|
|
|
|
while (salt.charAt(0) == '0') {
|
|
|
|
salt = salt.substring(1);
|
|
|
|
}
|
|
|
|
String salted = randomPassword + salt;
|
|
|
|
String hashedSalted = hash.hashstring(salted);
|
|
|
|
|
|
|
|
System.out.println("Guessing...");
|
|
|
|
startTime = System.nanoTime();
|
|
|
|
|
|
|
|
match = false;
|
|
|
|
check=0;
|
|
|
|
while (!match) {
|
|
|
|
String guess = getRandomPassword(check);
|
|
|
|
check++;
|
|
|
|
String saltedGuess = guess + salt;
|
|
|
|
String hashedGuess = hash.hashstring(saltedGuess);
|
|
|
|
if (hashedGuess.equals(hashedSalted)) {
|
|
|
|
match = true;
|
|
|
|
System.out.println("Match!");
|
|
|
|
System.out.println("Password is: " + guess);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
endTime = System.nanoTime();
|
|
|
|
duration = (endTime - startTime);
|
|
|
|
seconds = (double)duration / 1_000_000_000.0;
|
|
|
|
System.out.println("Time taken: " + seconds + " seconds");
|
|
|
|
|
|
|
|
|
|
|
|
System.out.println("Guessing hash of a random 6 digit password with pepper");
|
|
|
|
|
|
|
|
System.out.println("Hashed password");
|
|
|
|
String pepper = pepperedHash.getPepper();
|
|
|
|
String peppered = randomPassword + pepper;
|
|
|
|
String hashedPeppered = hash.hashstring(peppered);
|
|
|
|
|
|
|
|
System.out.println("Guessing...");
|
|
|
|
startTime = System.nanoTime();
|
|
|
|
match = false;
|
|
|
|
check=0;
|
|
|
|
|
|
|
|
while (!match) {
|
|
|
|
String guess = getRandomPassword(check);
|
|
|
|
check++;
|
|
|
|
if (pepperedHash.checkPeppered(guess,hashedPeppered)) {
|
|
|
|
match = true;
|
|
|
|
System.out.println("Match!");
|
|
|
|
System.out.println("Password is: " + guess);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
endTime = System.nanoTime();
|
|
|
|
duration = (endTime - startTime);
|
|
|
|
seconds = (double)duration / 1_000_000_000.0;
|
|
|
|
System.out.println("Time taken: " + seconds + " seconds");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2023-10-24 14:29:41 +11:00
|
|
|
public static String getRandomPassword(int value) {
|
2023-10-23 18:50:45 +11:00
|
|
|
// Define the characters that can be used in the random string
|
|
|
|
String characters = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
|
|
|
|
|
|
// Initialize a StringBuilder to build the random string
|
|
|
|
StringBuilder randomString = new StringBuilder(6);
|
|
|
|
|
|
|
|
// Generate a string using the value
|
|
|
|
for (int i = 0; i < 6; i++) {
|
|
|
|
randomString.append(characters.charAt(value % characters.length()));
|
|
|
|
value /= characters.length();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return randomString.toString();
|
|
|
|
}
|
|
|
|
}
|