2012-08-04 60 views
1

我正在尝试多线程和密码破解程序看起来像最简单(更容易,然后opengl)密集型任务。多线程密码破解程序

写一个多线程密码破解器会值得吗?它会提高超线程双核心(4核心)的效率吗?

让1个线程生成散列,而另一个线程比较它或在多个线程之间划分生成会更快吗?

我知道很多问题,其中任何一个答案都会很好,谢谢。

+4

你有一些合法的理由需要密码破解?我正在努力想出一个。 – 2012-08-04 16:17:20

+1

我认为大部分时间都花在生成哈希而不是比较上,所以你的工作分工可能无法工作。我认为你可以通过将字典或范围划分为不同的线程来分割工作。 – nhahtdh 2012-08-04 16:17:26

+1

@JonSkeet:让我来解释一个(非常有效的)理由:对于教育(人们可以学习如何编写一个非常高效的程序,并且通过线程编程也可以让自己变得很肮脏)。 – nhahtdh 2012-08-04 16:21:22

回答

0

经过广泛的研究,我可以说多线程密码破解程序不是最好的时间使用。

多线程虽然能够提高资源效率,但在服务器\客户端交互中也很有用。

在下面的示例中,多线程用于允许服务器同时接受多个客户端并与之交互。

while (1) { 

    listen(sd,10); 
    cliLen=sizeof(cliAddr); 
    printf("[LISTINING %u][%u]\n",SERVER_PORT,i); 

    //Accept Connection 

    newSd = accept(sd, (struct sockaddr *) &cliAddr, &cliLen); 
    if(newSd < 0) 
    { 
     perror("cannot accept connection"); 
     exit(3); 
    } 

    pthread_create(&pth, NULL, &connectionManager, (void*)newSd); 

    i++;   
} 

.... .... -

int connectionManager(newSd,data){ 


send(newSd,"[Connection Created on New Thread]\n\r",strlen("[Connection Created on New Thread]\n\r"), 0); 
//pthread_create(&pthsend,NULL, &dataSender, (void*)newSd); 
pthread_create(&pthget, NULL, &dataGetter, (void*)newSd); 
pthread_join(pthsend, NULL); 
pthread_join(pthget, NULL); 
close(newSd); 
pthread_exit; 


} 

进一步的研究可以确定一个效率的“甜蜜点”。对于所有盒子,这可能会有所不同。

1

实际上有很多种方法。为了简单起见,你应该划分大部分工作。在这种情况下,很明显大部分工作都是在计算散列值时完成的。在不明显的情况下,你会想要分析你的应用程序,并找出大部分时间花在哪里。但是请记住,许多线程创建/连接都会产生开销,所以最好在开始工作之前为每个线程分配一部分工作(如果有人找到了解决方案,可以查看一些受保护的共享变量)。

但是,请注意,根据您尝试破解的散列类型(我假设您将是暴力破解者),不能保证您的程序将完成。大多数(因此,我的意思是任何实际/有效的)散列算法在计算不可行性的概念下运行。如果你会产生随机字符串来破解,注意所有的黑客需要做的就是找到一个碰撞。例如,考虑一种情况,其中'猫'和'狗'映射到相同的散列值并且真实密码是'狗'。如果你的黑客找到'猫'作为解决方案,这个解决方案也是可行的。然而,这仍然是一个非常困难的问题,也不能保证完成。

另一种选择是字典攻击(因为这是教育 - 这应该是可行的)。如果你正在做一个简单的字典攻击,并且这个词不在字典中,那么你将会很幸运。不过,这可以保证在字典的末尾完成。为了实现这一点,最好分割你的字典。如果你有4个线程和一个1000字的词典,那么每个线程应该得到不同的字典子集(每个子集有250个条目)。然而,在实践中,大多数受保护的密码也可能具有某种形式的盐(只是需要思考)。

1

最快的多线程设计通常是每个内核一个线程。为什么线程交换?要完成的工作量保持不变。在某些情况下,许多线程可以用于缓解设计问题,但是如果要获得完整性能,则必须满足设计问题,以便每个内核可以使用一个线程。

核心我通常是指一个单独的非超线程逻辑核心。当然,存在设计技巧,问题可能是超线程正常工作或需要。