1

所以,有这个网站 (http://md5decrypter.co.uk),给定一个 md5 哈希,它将尝试返回原始字符串。

是否有 API 或有人制作了一个 PHP 类来使用它?我一个都找不到...

在你问之前,让我向你保证,我没有恶意。

先感谢您。

4

3 回答 3

4

即使来自 md5decryptor 的人很好,他也不会仅仅因为你在问,就让你通过 HTTP 访问他的资产。与其他任何人一样,您可以使用需要验证码的公开可用的网络界面 - 它说明了一切。

或者简而言之:不,那里没有 PHP API。

但是,你为什么不自己经营呢?这是相当微不足道的:

$decryptors = array('Google', 'Gromweb');

foreach ($hashes as $hash) {
    echo "$hash";
    foreach($decryptors as $decrytor)
    {
        if (NULL !== ($plain = MD5Decryptor::plain($hash, $decrytor))) {
            echo " - found: $plain ($decrytor)";
            break;
        }
    }
    echo "\n";
}

输出:

fcf1eed8596699624167416a1e7e122e - found: octopus (Google)
bed128365216c019988915ed3add75fb - found: passw0rd (Google)
d0763edaa9d9bd2a9516280e9044d885 - found: monkey (Google)
dfd8c10c1b9b58c8bf102225ae3be9eb - found: 12081977 (Google)
ede6b50e7b5826fe48fc1f0fe772c48f - found: 1q2w3e4r5t6y (Google)

那些您无法直接查找的,您可以手动粘贴到该站点。请记住,如果更多的人像你一样思考,就会有越来越多的网站关闭(其中大多数已经关闭)。

abstract class MD5Decryptor
{
    abstract public function probe($hash);

    public static function plain($hash, $class = NULL)
    {
        if ($class === NULL) {
            $class = get_called_class();
        } else {
            $class = sprintf('MD5Decryptor%s', $class);
        }
        $decryptor = new $class();

        if (count($hash) > 1) {
            foreach ($hash as &$one) {
                $one = $decryptor->probe($one);
            }
        } else {
            $hash = $decryptor->probe($hash);
        }
        return $hash;
    }

    public function dictionaryAttack($hash, array $wordlist)
    {
        $hash = strtolower($hash);
        foreach ($wordlist as $word) {
            if (md5($word) === $hash)
                return $word;
        }
    }
}

abstract class MD5DecryptorWeb extends MD5Decryptor
{
    protected $url;

    public function getWordlist($hash)
    {
        $list = FALSE;
        $url = sprintf($this->url, $hash);
        if ($response = file_get_contents($url)) {
            $list[$response] = 1;
            $list += array_flip(preg_split('/\s+/', $response));
            $list += array_flip(preg_split('/(?:\s|\.)+/', $response));
            $list = array_keys($list);
        }
        return $list;
    }

    public function probe($hash)
    {
        $hash = strtolower($hash);
        return $this->dictionaryAttack($hash, $this->getWordlist($hash));
    }
}

class MD5DecryptorGoogle extends MD5DecryptorWeb
{
    protected $url = 'http://www.google.com/search?q=%s';

}

class MD5DecryptorGromweb extends MD5DecryptorWeb
{
    protected $url = 'http://md5.gromweb.com/query/%s';
}
于 2012-04-19T19:20:57.597 回答
1

BozoCrack是一个非常简单的 ruby​​ 脚本,它使用 google 作为彩虹表,并且非常擅长破解未加盐的 MD5 密码。查看代码,将其迁移到 PHP 应该不会太难。

PS:每个使用无盐MD5作为密码哈希算法的人都应该破解他的密码,一对一......不要使用md5,使用bcrypt

于 2012-04-19T08:01:14.817 回答
0

你总是可以自己做:

<?php 
//From file or some John the ripper piped input
$wordlist=file('some_word_list.lst');

foreach ($wordlist as $word){
    $sql="INSERT INTO table (plain_word,hashed_word)values('$word','".md5($word)."')";
    ...
}
?>
于 2012-04-16T21:06:48.303 回答