一个朋友给我一个挑战:他使用PHP的crypt函数(CRYPT_STD_DES)(来自PHP4)对字符串进行了加密.我知道用于加密的盐,并且因为crypt是一种单向算法,所以我必须使用蛮力方法,而且我知道密码仅包含小写字母.
现在,我有一台具有16个内核(2个Xeon)和大量RAM的计算机.实施强制攻击最有效的方法是什么(我想我必须使用PHP,这不太好,但是如果你们有什么主意…)
[编辑]
我忘了提一下,加密的presentationaction长度为13个字符,而字符串小于8个字母,就像简单的密码加密一样:)
解决方法:
这是使用C语言的快速尝试(与gcc -O2 -lcrypt编译)
在Ubuntu 10.04.1上
#define _XOPEN_SOURCE
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
void inc(char *p)
{
int i;
for (i=0 ; i<8 && p[i]=='z' ; i++);
if (i >= 8) exit(printf("Not found :-(\n"));
if (!p[i]) p[i]='a';
else p[i]++;
while (--i >= 0) p[i]='a';
}
int main ()
{
char *salt = "XY";
char *buzz = "XYaAbBcCZ0123";
char pass[] = { 'a',0,0,0,0,0,0,0,0 };
while(1)
if ( ! strcmp(crypt(pass, salt), buzz))
exit(printf("Found %s :-)\n", pass));
else
inc(pass);
}
该代码应在当今的PC上在一两天内运行(2.10 ^ 11组合),您可以在多台计算机上运行它,一台从“ a”运行到“ gzzzzzzz”,另一台从“ haaaaaaa”运行到“ nzzzzzzzzz”等. .. 例如.