Hash 在不使用文件的情况下强制执行哈希值的一种方法

Hash 在不使用文件的情况下强制执行哈希值的一种方法,hash,Hash,首先,这个问题是关于我最近写的这条线; 举例胜于解释 假设我们有这个md5哈希:15e0adc0213e01ec44acee74ed4ece5b 我只知道这个散列方法是md5,明文长度是6,字符集是[a-zA-Z]。 现在,我必须用这些信息找到清晰的文本。 我最初会做什么 我只想在linux上使用“crunch”软件,创建一个具有所有可能的文件。 然后我会编写一个脚本,计算每一行的散列并搜索整个文件,直到找到我要查找的文件。 不幸的是,由于[a-zA-Z]{6}生成了131GB的文件,因此不

首先,这个问题是关于我最近写的这条线;

举例胜于解释

假设我们有这个md5哈希:
15e0adc0213e01ec44acee74ed4ece5b

我只知道这个散列方法是md5,明文长度是6,字符集是[a-zA-Z]。

现在,我必须用这些信息找到清晰的文本。

我最初会做什么

我只想在linux上使用“crunch”软件,创建一个具有所有可能的文件。
然后我会编写一个脚本,计算每一行的散列并搜索整个文件,直到找到我要查找的文件。 不幸的是,由于[a-zA-Z]{6}生成了131GB的文件,因此不建议使用此方法。我需要另找一条路。

我正在考虑的另一种选择

我正在考虑并寻找一种方法来强制执行此哈希,方法与我上面描述的相同,但不使用文件。 是否有类似于此“代码”的脚本(无论何种语言)

for(int i=0; i<[a-zA-Z]{6}.size(); i++){
    int result = md5_function(i)
    if( result == '15e0adc0213e01ec44acee74ed4ece5b' ) {
        cout << "Result : " << result << endl;
    }
    else {}
}

for(int i=0;iC#中的一个简单实现类似于:

IEnumerable<string> GetCombinations(char[] charset, int length)
{
    if(length == 0)
    {
        yield return "";
        yield break;
    }
    foreach(var s in GetCombinations(charset, length-1))
    {
        foreach(var c in charset)
        {
            yield return s + c;
        }
    }
}

更丑陋、更不灵活,但也更容易理解:

foreach(var c1 in charset)
{
    foreach(var c2 in charset)
    {
        ...
            foreach(var c6 in charset)
            {
                var s = c1 + c2 + ... + c6;
                if(hash(s)==targetHash)
                    yay(s);
            }
        ...
    }
}

我不知道其他的反对票,但我的反对票是因为你甚至懒得抄过去。​ ​
foreach(var c1 in charset)
{
    foreach(var c2 in charset)
    {
        ...
            foreach(var c6 in charset)
            {
                var s = c1 + c2 + ... + c6;
                if(hash(s)==targetHash)
                    yay(s);
            }
        ...
    }
}