检测随机文件名的算法?

时间:2010-11-02 05:59:40

标签: algorithm random filenames

有人能想到一种可以检测随机文件名的算法吗?例如,人类可以告诉文件名“SKJJSMIJ.EXE”看起来像是随机生成的文件名,比如“winsetup.exe”或“Photoshop.exe”,但程序如何确定?谢谢!

4 个答案:

答案 0 :(得分:5)

如果SKJJSMIIJ来自society of knights juggling juniors, skunks, mascots, idiots, introverts and jockeys,该怎么办?那么它将是一个合法的文件名。还要考虑Eyjafjallajökull.jpg之类的名称。这看起来像一个随机文件名,但实际上是冰岛火山的名称。您可以制作一个检测不可发声的文件名的算法,但它会给出许多误报。

答案 1 :(得分:2)

如果您真的对此深入了解,可以尝试一些不同的项目:

  1. 寻找字典单词。如果文件名包含长度约为4或更长的字典单词,则可能不是随机的。

  2. 寻找辅音/元音模式 - 如果一个文件连续有很多(3+)个辅音,那么它更可能是随机的。另一方面,如果连续几乎不超过2个辅音/元音,则不太可能是随机的。

  3. 看看大写。如果存在奇怪的大写形式(如XxXXxxxXxXX),那么它是随机的。另一方面,如果它遵循非常简洁的大写模式(如XxxxxXxxxxXxxxXxxxx或类似),则随机性变得更不可能。

  4. 看看不太可能的字符配对。将文件名分解为成对的相邻字母(因此"abcd.txt"变为['ab', 'bc', cd']),并将每个对的出现频率与正常文件名的预先计算的值集进行比较。这与检查字典单词类似,但不需要全面的字典(也可以在专有名称等方面进行培训)。

  5. 寻找数字与字母的模式 - 具有非常混合的数字和字母部分的文件名(特别是那些之间没有分隔符的文件名)可能是随机的。

  6. 没有任何方法是万无一失的,但是如果你将这些启发式方法结合在一起来设计一个整体得分,你可能会得到一个“足够好”的近似值。

答案 2 :(得分:1)

在您给出的示例中,“非随机”文件名都包含英文单词,而“随机”文件名则不包含英文单词。我认为对于“随机性”的一个良好的起始启发式,因为你似乎定义它将检查文件名的子串(当然是在扩展名之前),看它们是否匹配合理大小的字典中的单词。

答案 3 :(得分:1)

嗯,当然,这取决于目标语言,但是对于英语,我无法想到我头顶的任何单词,它们有两个J个字符连续,也不是连续三个任何字符。

您也可以在键盘的某个部分查找具有优势字符的分组,例如ewrwqrbvnvxbnx

或者,检查单词和单词部分的辅音与元音比率。

这可能是一个好的开始,但没有任何方法是万无一失的。