有人能想到一种可以检测随机文件名的算法吗?例如,人类可以告诉文件名“SKJJSMIJ.EXE”看起来像是随机生成的文件名,比如“winsetup.exe”或“Photoshop.exe”,但程序如何确定?谢谢!
答案 0 :(得分:5)
如果SKJJSMIIJ
来自society of knights juggling juniors, skunks, mascots, idiots, introverts and jockeys
,该怎么办?那么它将是一个合法的文件名。还要考虑Eyjafjallajökull.jpg
之类的名称。这看起来像一个随机文件名,但实际上是冰岛火山的名称。您可以制作一个检测不可发声的文件名的算法,但它会给出许多误报。
答案 1 :(得分:2)
如果您真的对此深入了解,可以尝试一些不同的项目:
寻找字典单词。如果文件名包含长度约为4或更长的字典单词,则可能不是随机的。
寻找辅音/元音模式 - 如果一个文件连续有很多(3+)个辅音,那么它更可能是随机的。另一方面,如果连续几乎不超过2个辅音/元音,则不太可能是随机的。
看看大写。如果存在奇怪的大写形式(如XxXXx
或xxXxXX
),那么它是随机的。另一方面,如果它遵循非常简洁的大写模式(如Xxxxx
,XxxxxXxxxXxxxx
或类似),则随机性变得更不可能。
看看不太可能的字符配对。将文件名分解为成对的相邻字母(因此"abcd.txt"
变为['ab', 'bc', cd']
),并将每个对的出现频率与正常文件名的预先计算的值集进行比较。这与检查字典单词类似,但不需要全面的字典(也可以在专有名称等方面进行培训)。
寻找数字与字母的模式 - 具有非常混合的数字和字母部分的文件名(特别是那些之间没有分隔符的文件名)可能是随机的。
没有任何方法是万无一失的,但是如果你将这些启发式方法结合在一起来设计一个整体得分,你可能会得到一个“足够好”的近似值。
答案 2 :(得分:1)
在您给出的示例中,“非随机”文件名都包含英文单词,而“随机”文件名则不包含英文单词。我认为对于“随机性”的一个良好的起始启发式,因为你似乎定义它将检查文件名的子串(当然是在扩展名之前),看它们是否匹配合理大小的字典中的单词。
答案 3 :(得分:1)
嗯,当然,这取决于目标语言,但是对于英语,我无法想到我头顶的任何单词,它们有两个J
个字符连续,也不是连续三个任何字符。
您也可以在键盘的某个部分查找具有优势字符的分组,例如ewrwqr
或bvnvxbnx
。
或者,检查单词和单词部分的辅音与元音比率。
这可能是一个好的开始,但没有任何方法是万无一失的。