【问题标题】:PHP's crypt challengePHP 的加密挑战
【发布时间】:2011-04-18 14:12:07
【问题描述】:

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

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

[编辑]

我忘了说,加密的表示是13个字符长度,字符串少于8个字母,就像一个简单的密码加密:)

【问题讨论】:

  • 在你开始搜索字符串之前,很有可能它已经被解密了:)
  • 这是“巧克力”。但说真的,如果它是加盐的,我认为用谷歌搜索它不会有好的结果。

标签: php encryption brute-force


【解决方案1】:

来自 PHP 手册:

crypt() 将使用标准 Unix 返回一个散列字符串 基于 DES 的算法或替代方案 可能可用的算法 系统。

一些操作系统支持更多 不止一种哈希。实际上, 有时基于标准 DES 算法被一个基于 MD5 的 算法。哈希类型被触发 通过盐的论点。在 5.3 之前, PHP 将确定可用的 安装时的算法基于 系统的 crypt()。如果没有盐 提供,PHP 将自动生成 一个标准的两个字符 (DES) 盐,或十二个字符(MD5), 取决于 MD5 的可用性

换句话说,crypt() 函数只是从 C 库中调用操作系统的 crypt() 函数。这意味着两件事。

首先,加密的类型是标准化的。你不需要使用 PHP 来蛮力运行,你只需要知道使用的算法。许多程序,如 Cane 和 Abel 或 Jack the Ripper 都能够通过暴力破解、字典或彩虹表攻击来破解多种算法。

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

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

【讨论】:

    【解决方案2】:

    最有效(尽管可能是最不具挑战性)的方法可能是找到已经实现它的人(例如使用John the Ripper)。

    【讨论】:

      【解决方案3】:

      这是 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 组合)在现在电脑上运行,您可以在多台机器上运行它,一台从“a”到“gzzzzzzz”,另一台例如,从“haaaaaaa”到“nzzzzzzz”等等。

      【讨论】:

      • 我为此添加了一些快速线程使用,以消耗 16 个可用内核,并且它在 3 小时内完成了这个技巧,谢谢 :)
      • 密码是:allegro :)(波兰 ebay 等效名称)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-12
      • 2020-01-16
      • 1970-01-01
      • 1970-01-01
      • 2014-09-21
      • 2018-01-03
      • 2021-10-22
      相关资源
      最近更新 更多