如何找到SHA1哈希?

时间:2013-11-27 09:44:46

标签: sha

我在学校里完成了有趣的任务。我必须找到sha-1哈希持续生日示例的消息。如果我出生于1932年4月4日,那么哈希必须以040532结束。有任何建议如何找到它?

2 个答案:

答案 0 :(得分:3)

我在C#中的解决方案:

//A create Sha1 function:
using System.Security.Cryptography;
public static string GetSHA1Hash(string text)
    {
        var SHA1 = new SHA1CryptoServiceProvider();

        byte[] arrayData;
        byte[] arrayResult;
        string result = null;
        string temp = null;

        arrayData = Encoding.ASCII.GetBytes(text);
        arrayResult = SHA1.ComputeHash(arrayData);
        for (int i = 0; i < arrayResult.Length; i++)
        {
            temp = Convert.ToString(arrayResult[i], 16);
            if (temp.Length == 1)
                temp = "0" + temp;
            result += temp;
        }
        return result;
    }

Source

然后是一个随机字符串生成器:

 private static Random random = new Random((int)DateTime.Now.Ticks);//thanks to McAden
 private string RandomString(int size)
    {
        StringBuilder builder = new StringBuilder();
        char ch;
        for (int i = 0; i < size; i++)
        {
            ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));
            builder.Append(ch);
        }

        return builder.ToString();
    }

Source

现在你可以为你的组合暴力:

        string search = "32";
        string result = String.Empty;
        int slen = 5;
        string myTry = RandomString(slen);

        while (!result.EndsWith(search))
        {
            myTry = RandomString(slen);
            result = GetSHA1Hash(myTry);

        }

        MessageBox.Show(result + "   " + myTry);

这将搜索以32. Happy Bruteforcing结尾的哈希字符串:)

编辑:找到一个例子:HXMQVNMRFT给出e5c9fa9f6acff07b89c617c7fd16a9a043040532

答案 1 :(得分:2)

开始从不同的消息 1 生成哈希值。

最终将使用此类属性生成哈希。这对暴力来说并不坏,因为范围只有2 24 (或〜1600万),SHA 非常快。

SHA is a one way cryptographic hash function没有捷径。特别是在这里,SHA具有“生成具有给定散列的消息是不可行的”的属性。


1 输入应该是不同的,一个简单的计数器就足够了。然而,基于所寻求的生日 - 例如,生成准随机消息可能更有趣。包括日期的各种形式和句子Mad Lib风格。只要这不限制域,这样就没有符合条件的哈希,它就可以像任何其他源消息一样工作。