我想知道是否有可能找到一个会散列到已知值的文本块。特别是,我正在寻找一个函数CreateDataFromHash(),可以按如下方式调用:
unsigned char myHash[] = "da39a3ee5e6b4b0d3255bfef95601890afd80709";
unsigned int length = 10000;
CreateDataFromHash(myHash, length);
此处CreateDataFromHash
将返回包含任意数据的长度为10000的字符串,该字符串将使用SHA1散列到myHash
。
感谢。
答案 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)