crc32解密短字符串

时间:2010-04-08 13:45:18

标签: c# vb.net encryption crc32

我正在检索包含文件名称的crc32哈希列表,而不是内容。

我需要能够解密散列名称的字符串,例如“vacationplans_2010.txt”

长度不超过25个字符。

这可能吗?

3 个答案:

答案 0 :(得分:8)

它是单向散列函数。它无法解密。

答案 1 :(得分:5)

尽管其他用户回答, CRC32不是加密哈希函数;它用于完整性检查(数据校验和)。 加密哈希函数通常被描述为“单向哈希函数”,CRC32缺少“单向”部分。

话虽如此,您应该考虑以下因素:由于所有可能的25个字符或更少的文件名的集合大于2 ^ 32,因此某些文件名必须具有相同的散列值。因此,对于您获得的某些CRC32值,可能会有几个可能的源(文件名)。你需要一种方法来确定“真正的”来源(我认为人类的决定将是最好的选择,因为我们的大脑是一个伟大的模式识别设备,但它实际上取决于你的场景)。

可以使用几种方法来部分实现您的要求。 暴力就是其中之一(虽然文件名长25个字符,但暴力可能需要一段时间)。修改后的字典攻击是另一种选择。其他选项基于对CRC32算法的分析,并且需要您深入研究算法的实现细节(否则您将很难理解您正在实现的内容)。例如,请参阅此article或此artice

编辑:Bruce Schneier的定义(Applied Cryptography的作者,以及其他内容):

  

单向函数相对容易   计算,但更难   扭转。 ......在这种情况下,   “hard”被定义为:   这需要数百万年的时间   从f(x)计算x,即使是全部   世界上的计算机被分配了   问题。

     

哈希函数是一个函数,   数学或其他,需要   一个可变长度的输入字符串和   (称为前映像)并转换它   固定长度(通常较小)   输出字符串(称为哈希值)。

     

单向哈希的安全性   功能是它的单向性。

答案 2 :(得分:2)

像CRC32这样的hash function计算给定(变量)输入的简单值。计算是不可逆的 - 即,只能给出散列值,您无法可靠地获得原始值。