能力值:
( LV12,RANK:403 )
|
-
-
2 楼
应该是Unix/Linux口令的加密
参见http://blog.chinaunix.net/u/27852/showart_234372.html
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
看完文章
对于第一种 '$1$xNeXk5jE$rLkEwte2.sFTGlsqQox/g1'
$1$xNeXk5jE$应该是salt,后面的rLkEwte2.sFTGlsqQox/g1是否就是MD5值?
第二种 '$1NeKTffTZ07o'是1-DES或2-DES?怎么判断?
另外MD5是否基本是不可破解的?如果能破,怎么破?
现实中(个人PC)JohnRipper是否可以破解上述密码?
|
能力值:
( LV4,RANK:50 )
|
-
-
4 楼
是的。第一种确实是Linux中shadow的MD5,以$1前缀开头的使用这种方式。salt是从$1到最后一个$之间的字符,比如这个是
$1$xNeXk5jE$rLkEwte2.sFTGlsqQox/g1
后面黑色部分就是crypt()的结果。 这种密码可以用穷举来破解(当然有个好字典也行),具体方法是调用Linux自身的libcrypt库来正向计算加密结果,然后比对计算结果是否为你需要的散列值。例如要破解 $1$4rIWwSl1$29U2moXvLlESsRoLSUTOA0 - 654321 这个简单的密码:
#include <crypt.h>
// 首先填充 salt,这个是已知的 const char salt[] = "$1$4rIWwSl1"; char *result; // 然后调用 crypt() 函数算出对应密码的散列 result = crypt ("654321", salt); // 当然这里不可能一开始就知道密码是654321,应该写一个循环挨个穷举字符集里的密码组合 // 这里比较一下加密结构是否为 $29U2moXvLlESsRoLSUTOA0,如果是则说明密码654321正确 printf("%s%s\n", salt, result);
第二个不像des的。也许是变种,我只见过类似 a44L3wQdaePiI 这样的,以前两个字符为salt,整个字符串为crypt()结果,这个早期的Linux中用得比较广泛。虽然长度满足,但你这个$1开头的,还真不好说。 无论哪种加密都可以用穷举来攻击,只不过速度很慢。DES的还好点,我在一台Xeon 4核(2.0GHz)的服务器上,每秒能算近10W个密码。不过MD5密码能跑到3000个每秒就已经是极限了,我完全没有耐心等他跑完...
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
$1$xNeXk5jE$rLkEwte2.sFTGlsqQox/g1
标准md5
|
能力值:
( LV3,RANK:30 )
|
-
-
6 楼
MD5貌似没有这么乱吧
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
单项散列一直这样,MD5只要看长度,不看乱不乱。
ps:不过我也觉得有点乱
|
|
|