【发布时间】:2025-11-27 04:00:01
【问题描述】:
我在学校得到了有趣的任务。我必须在我的生日示例中找到 sha-1 哈希持续的消息。如果我出生于 1932 年 5 月 4 日,那么哈希必须以 040532 结尾。有什么建议可以找到它吗?
【问题讨论】:
-
对我的建议不满意?我该如何改进它?
标签: sha
我在学校得到了有趣的任务。我必须在我的生日示例中找到 sha-1 哈希持续的消息。如果我出生于 1932 年 5 月 4 日,那么哈希必须以 040532 结尾。有什么建议可以找到它吗?
【问题讨论】:
标签: sha
我在 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;
}
然后是随机字符串生成器:
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();
}
现在你可以暴力破解你的组合:
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。
最终将使用这样的属性生成一个哈希。这对于蛮力来说并没有那么糟糕,因为范围只有 224(或约 1600 万)并且 SHA非常快。
没有SHA is a one way cryptographic hash function 的快捷方式。特别是在这里,SHA 具有“生成具有给定哈希的消息是不可行的”的属性。
1 输入应该是不同的,一个简单的计数器就足够了。然而,根据正在寻找的生日生成准随机消息可能更有趣 - 例如包括各种形式的日期和句子Mad Lib风格。只要这不限制域,例如没有合格的哈希,它就可以像任何其他源消息集一样工作。
【讨论】: