【发布时间】:2016-02-05 17:29:13
【问题描述】:
我在为类分配创建蛮力 Java 代码时遇到了一些麻烦。教授帮不上什么忙,我希望有人能帮我一把或给点建议。教授提供了两种方法md5_bytes 和mini_md5_bytes。迷你字节用于解码 24 位而不是完整的哈希。我试图自己去做,但我碰壁了。随机字符串生成器是我尝试使用随机字符串最终找到预选单词 s 的哈希值的尝试。我很感激帮助。
public class BruteForce {
static int num_bytes=24;
static String rand = "";
static String s = "aefbcefacefeacaecefc";
static byte[] random = null;
static byte[] md = null;
public static void main(String[] args) throws Exception{
md = mini_md5_bytes(s, num_bytes);
if(s.equalsIgnoreCase(rand)){
System.out.println(rand);
}
else{
rand = brute(md, s);
}
}
public static byte[] mini_md5_bytes(String s, int num_bytes){
byte[] md = md5_bytes(s);
return Arrays.copyOf(md,num_bytes);
}
public static byte[] md5_bytes(String s){
MessageDigest md;
try {
md = MessageDigest.getInstance("MD5");
md.update(s.getBytes());
return md.digest();
} catch( java.security.NoSuchAlgorithmException e) {
return null;
}
}
public static String brute(byte[] md, String s) throws Exception{
while(!s.equalsIgnoreCase(rand)){
rand = RandomStringGenerator.generateRandomString(20,RandomStringGenerator.Mode.ALPHA);
byte[] random = mini_md5_bytes(rand, num_bytes);
if((Arrays.equals(random, md))){
rand = s;
return rand;
}
}
return null;
}
}
【问题讨论】:
-
如果你想使用蛮力,最好为所有值编码,而不是使用随机生成器。
-
你到底有什么问题?代码需要永远运行吗?当然可以——你正在尝试使用随机字符串来暴力破解哈希!
-
我也不清楚这个问题。它不工作吗?它没有完成吗?你永远不会用随机字符串完成,因为你永远无法知道你在哪里/你去过哪里,而且你最终可能会反复尝试相同的字符串。我建议你建立一个“尝试”列表。
-
那么一个递增的计数变量?它永远运行我什至尝试限制它使用的字母表。有没有一种方法可以消除随机字符串以使其运行得更快,或者它总是会随机产生一个
标签: md5