我有一个挑战要完成从给定的MD5哈希中获取字符串。例如,我在此问题中需要获得的字符串格式为:1)来自霍比特人的矮人,2)数字1-9999,以及3)彩虹的颜色。这是给定的MD5哈希值:24c64b83434eb1dccc5beb6162c954cb
例如,在这种情况下,字符串可能具有以下格式:fili287yellow或类似的东西。
以下是一些Java shellcode作为解决挑战的起点:
//Made with help from http://www.mkyong.com/java/java-md5-hashing-example/
import java.security.MessageDigest;
public class md5_shellcode {
public static void main(String[] args){
//Add your code here
}
/**
* Md5 hash function, do not modify
* @param dwarf Dwarf in the company of Thorin
* @param number Number 1 - 9999
* @param color Color of the rainbow
* @return md5 hash of dwarf + number + color
*/
public static String md5Hash(String dwarf, int number, String color){
try{
MessageDigest m = MessageDigest.getInstance("MD5");
m.update((dwarf + number + color).getBytes());
byte b[] = m.digest();
StringBuffer s = new StringBuffer();
for(int i = 0; i < b.length; i++)
s.append(Integer.toString((b[i] & 0xff) + 0x100, 16).substring(1));
return s.toString();
}
catch(Exception e){
System.out.println("lol");
}
return "Error";
}
}
我该如何解决这个问题?脚本本身会是什么样的?
对不起,如果这是一个新手问题!我通常不会考虑这些目标,因此解决这样的挑战非常困难!
答案 0 :(得分:2)
将散列解码回生成它的字符串是不可能的。找到答案的唯一方法是尝试散列不同的字符串,直到找到产生正确散列的字符串。我不打算为你写出一个完整的工作解决方案,但它有这种一般形式:
您的程序可能具有以下一般形式:
public static void main(String[] args) {
String[] dwarves = { "fili", ... };
String[] colors = { "red", ... };
for (String dwarf : dwarves) {
for (int ii = 1; ii <= 9999; ++ii) {
for (String color : colors) {
String candidate = dwarf + ii + color;
// Hash and test the candidate
}
}
}
}