我正在检索包含文件名称的crc32哈希列表,而不是内容。
我需要能够解密散列名称的字符串,例如“vacationplans_2010.txt”
长度不超过25个字符。
这可能吗?
答案 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计算给定(变量)输入的简单值。计算是不可逆的 - 即,只能给出散列值,您无法可靠地获得原始值。