我在学校里完成了有趣的任务。我必须找到sha-1哈希持续生日示例的消息。如果我出生于1932年4月4日,那么哈希必须以040532结束。有任何建议如何找到它?
答案 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;
}
然后是一个随机字符串生成器:
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 :(得分:2)
开始从不同的消息 1 生成哈希值。
最终将使用此类属性生成哈希。这对暴力来说并不坏,因为范围只有2 24 (或〜1600万),SHA 非常快。
SHA is a one way cryptographic hash function没有捷径。特别是在这里,SHA具有“生成具有给定散列的消息是不可行的”的属性。
1 输入应该是不同的,一个简单的计数器就足够了。然而,基于所寻求的生日 - 例如,生成准随机消息可能更有趣。包括日期的各种形式和句子Mad Lib风格。只要这不限制域,这样就没有符合条件的哈希,它就可以像任何其他源消息一样工作。