代码之家  ›  专栏  ›  技术社区  ›  canni

PHP的crypt挑战

  •  3
  • canni  · 技术社区  · 14 年前

    现在,我有一台16核(2xxeon)的机器,还有很多RAM。实现这种强制攻击最有效的方法是什么(我想我必须使用PHP,这不太好,但如果你们有想法的话……)

    [编辑]

    我忘了提一下,加密的表示长度是13个字符,字符串不到8个字母,就像一个简单的密码加密:)

    3 回复  |  直到 14 年前
        1
  •  2
  •   Déjà vu    14 年前

    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);
      }
    

    该代码应该在一台计算机上运行一两天(2.10^11个组合) 现在 pc机,你可以在几台机器上运行,一台从“a”到“GZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ。。。例如。

        2
  •  2
  •   stevendesu    14 年前

    从PHP手册:

    将使用标准Unix返回哈希字符串 基于DES的算法或替代方案 可能在上可用的算法 系统。

    一种以上的散列。事实上, 有时标准DES基于 算法。将触发哈希类型 PHP将决定可用的 系统的crypt()。如果没有盐 如果提供,PHP将自动生成 salt或12个字符(MD5), 取决于MD5的可用性

    换言之 密码() 函数只是从C库调用操作系统的crypt()函数。这意味着两件事。

    首先,加密的类型是标准化的。你不需要使用PHP来运行暴力,你只需要知道使用的算法。许多程序,如凯恩和亚伯或杰克开膛手能够打破几个算法通过暴力,字典,或彩虹表攻击。

    其次,加密的类型是基于被加密的操作系统。这意味着您可能必须尝试几种不同的加密方法,除非有明显的线索表明使用了哪种加密方法(加密字符串的模式可能会提示您某些信息)。

    我绝对不建议尝试使用PHP来强制执行它,因为解释语言的运行速度比编译语言慢得多。

        3
  •  1
  •   Tgr    14 年前

    最有效的方法(虽然可能是最没有挑战性的)可能是找到已经实现了它的人(使用 John the Ripper 例如)。

    推荐文章