我知道一些CRC32哈希的长度和受限制的字符集。这样是否更容易扭转它们?

Too*_*mai 5 python crc32

我们有一堆CRC32哈希值,如果知道它们的输入,将非常不错。其中一些足够短,以至于可以强行实施。其他不是。所使用的CRC32算法等于Python中的CRC32算法binascii(其实现在https://rosettacode.org/wiki/CRC-32#Python上阐明)。

我已阅读以下页面:

...在我看来,某处隐藏着某些东西,可以减少扭转这些事情的效果,而这些事情我是无法解决的。

我认为我们可以做得比完全强力更好的主要原因是,我们对哈希输入了解两点:

  1. 我们知道每个输入的长度。我相信这意味着,一旦我们发现长度相等且CRC值反向为0的猜测,那一定是正确的(尽管可能无济于事)。也许还有其他一些由算法引起的长度属性,可以减少我看不到的工作量。
  2. 我们也知道,每个输入都有一个受限制的字符集[A-Za-z_0-9](仅字母,数字和下划线)。此外,我们知道数字很稀少,而且A-Z似乎从未与混在一起a-z,因此我们常常可以[a-z_]在90%的情况下逃脱现实。
    • 而且,其中大多数是snake_case英语单词/短语(例如“ weight”或“ turn_around”)。因此,我们还可以过滤掉所有包含“ qxp”之类的猜测。

由于以上链接讨论了如何向输入中添加任意4个字符,并使散列保持不变,因此我想到的一个想法是对最后4个字符进行暴力破解(其中大多数无效,因为它们不在受限字符集中) ,过滤出明显不正确的内容(由于使用了非法的3个字母的英语连击等等),并提出了可能有效的最后4个字符的“简短”列表。然后我们重复直到整个事情都减少了,这应该比纯蛮力要快。但是我找不到逻辑上的飞跃来找出方法。

如果我朝错误的方向解决这个问题,那也很好。

Ren*_*nat 2

the majority of these are snake_case English words/phrases (e.g. "weight" or "turn_around")- 这些可以通过使用字典(例如来自这个问题)和实用程序来暴力破解。假设英语单词总数达到1M,尝试(1M)^2CRC32 看起来可行并且相当快。

给定一个包含所有字典单词的文本文件,可以使用例如工具来枚举所有单词word_word并与哈希值进行比较,指令如下CRCHashcat

hashcat64.bin -m 11500 -a 1 -j '$_' hashes.txt dictionary.txt dictionary.txt
Run Code Online (Sandbox Code Playgroud)

并针对字典中的每个单词进行测试:

hashcat64.bin -m 11500 -a 0 hashes.txt dictionary.txt
Run Code Online (Sandbox Code Playgroud)

对于超过 2 个单词的短语,每个短语长度将是一个单独的情况,例如Hashcat没有选项排列 3 个或更多字典(参考)。对于 3 个单词的短语,您需要首先生成一个包含 2 个单词组合的文件(例如,如此处,采用 的形式{}_{})。然后将其与一字词典结合:hashcat64.bin -m 11500 -a 1 -j '$_' hashes.txt two_words_dictionary.txt dictionary.txt。接下来,4个单词的短语可以被暴力强制为:hashcat64.bin -m 11500 -a 1 -j '$_' hashes.txt two_words_dictionary.txt two_words_dictionary.txt 等。(另一个选择是将组合通过管道传输到Hashcatas combine_scrip ... | hashcat64.bin -m 11500 -a 0 hashes.txt,但asCRC32检查起来非常快,管道将成为这里的瓶颈,使用字典文件比管道传输要快得多)

当然,n 个单词的排列会以指数方式增加复杂性n(具有巨大的基数)。但由于字典仅限于某些子集而不是所有英语单词,因此这取决于字典的大小,暴力破解的实际深度有多深。