PHP 的地穴挑战

标签 php encryption brute-force

一位 friend 给了我一个挑战:他使用 PHP 的 crypt 函数 (CRYPT_STD_DES)(来自 PHP4)加密了一个字符串。我知道用于加密的盐,并且由于 crypt 是一种单向算法,我必须使用蛮力方法,而且我知道密码仅由小写字母组成。

现在,我的机器有 16 个内核(2 个 Xeon)和大量 RAM。实现这种强制攻击的最有效方法是什么(我假设我必须使用 PHP,这不太好,但如果你们有任何想法......)

[编辑]

忘记说了,加密后的表示长度为13个字符,string少于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);
  }

该代码应该在一两天内(2.10^11 组合)在现在 PC 上运行,您可以在多台机器上运行它,一台从“a”到“gzzzzzzz”,另一台例如,从“haaaaaaa”到“nzzzzzzz”等等。

关于PHP 的地穴挑战,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3817945/

相关文章:

algorithm - 为什么暴力算法的时间复杂度是 O(n*m)?

bash - shell_exec 在 php web 应用程序中不工作

php - 使用 curl 定期从远程服务器获取数据

ssl - 如何在 openssl 1.0.2g 中列出 TLS 1.2 密码套件

PHP:反洪水/垃圾邮件系统

c++ - 如何将 Windows C++ 程序的输出重定向到另一个可执行文件?

php - 如何更改 WordPress 存档页面标题

javascript - PHP 对重音符号和特殊字符进行编码

java - 如何在java中使用AES加密除.text之外的文件?

encryption - 如何将私有(private)加密用户数据存储在数据库中,但使其可供其他选定用户使用?