java_passwords/guesser.java

126 lines
4.2 KiB
Java
Raw Permalink Normal View History

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("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) {
2023-10-25 13:48:43 +11:00
System.out.println(e);
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();
}
}