是否有一个库可以生成一个字符串,该字符串将哈希(SHA1)传递给给定的输入?

时间:2012-03-23 14:06:09

标签: c++ encryption hash sha1 sha

我想知道是否有可能找到一个会散列到已知值的文本块。特别是,我正在寻找一个函数CreateDataFromHash(),可以按如下方式调用:

unsigned char myHash[] = "da39a3ee5e6b4b0d3255bfef95601890afd80709";
unsigned int length = 10000;
CreateDataFromHash(myHash, length);

此处CreateDataFromHash将返回包含任意数据的长度为10000的字符串,该字符串将使用SHA1散列到myHash

感谢。

5 个答案:

答案 0 :(得分:5)

一般来说,没有已知的简单甚至是中等难度的方法。

哈希的整个点(或所谓的one-way functions),是很容易计算它们,但几乎不可能反转它们的计算(根据输出找到输入值)。也就是说,对于一些散列函数,有一些已知的方法可以允许在合理的时间内计算给定散列值的输入。

例如,这个MD5 sum technique会在1.6 GHz的计算机上发现大约8小时内的冲突(但不会输入给定的输出)。

对于SHA-1,您可能对reading this感兴趣。

答案 1 :(得分:2)

SHA1的目的之一是这应该很难做到。

答案 2 :(得分:1)

散列是一种单向函数。你无法从输出中获得输入。

答案 3 :(得分:1)

这将是一种“前像攻击”。没有公开反对SHA-1的事情。

针对SHA-1的唯一攻击是冲突攻击。这意味着我发现两个输入产生相同的结果,但它们都不是预先设定的,可以这么说。即便如此,对于大多数人来说,这种攻击并不是真的可行 - 根据所涉及的计算量,我能想到的最接近的是你必须花费几百万美元来建造一台机器,会给你一个每周一对碰撞的钥匙(假设它跑了,每天24小时不做任何其他事情)。

答案 4 :(得分:0)

你必须蛮力。参见

PHP brute force password generator

获取字符串,执行哈希,比较,重复