【问题标题】:How to find SHA1 hash?如何找到 SHA1 哈希?
【发布时间】:2025-11-27 04:00:01
【问题描述】:

我在学校得到了有趣的任务。我必须在我的生日示例中找到 sha-1 哈希持续的消息。如果我出生于 1932 年 5 月 4 日,那么哈希必须以 040532 结尾。有什么建议可以找到它吗?

【问题讨论】:

  • 对我的建议不满意?我该如何改进它?

标签: sha


【解决方案1】:

我在 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

【讨论】:

  • awww,不要给出完整的答案......代码本身很棒,但我发现给出答案字符串本身是不道德的。
  • 我认为给定的日期是假日期:) 如果他真的在寻找他的生日日期
  • 谁知道呢,也许 OP 真的是 81 岁了。如果他是,那就为保持他的好奇心而脱帽致敬:-)
【解决方案2】:

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

最终将使用这样的属性生成一个哈希。这对于蛮力来说并没有那么糟糕,因为范围只有 224(或约 1600 万)并且 SHA非常快。

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


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

【讨论】: