C# 如何确定文件名是否是随机的?
我需要能够测试一个文本列表的文件名,似乎随机 e、 g.aggvvcx.com或kbzaandc.exe 有什么合理/合理的方法可以做到这一点吗?我唯一的想法是检查元音和辅音的出现率,但这似乎不可靠,使用字典也不可靠 编辑:随机性的定义C# 如何确定文件名是否是随机的?,c#,python,algorithm,random,C#,Python,Algorithm,Random,我需要能够测试一个文本列表的文件名,似乎随机 e、 g.aggvvcx.com或kbzaandc.exe 有什么合理/合理的方法可以做到这一点吗?我唯一的想法是检查元音和辅音的出现率,但这似乎不可靠,使用字典也不可靠 编辑:随机性的定义 关于随机性的性质,我所掌握的唯一信息是它是一个文件名。也许有可能得到一个通用文件名的字典,并使用某种模式解析器来确定通用文件命名模式,并在培训后对照列表运行它?如果我们考虑使用多种语言,这显然是一种徒劳的方法,但我只对检查英文文件名感兴趣。有很多随机性测试,因此
关于随机性的性质,我所掌握的唯一信息是它是一个文件名。也许有可能得到一个通用文件名的字典,并使用某种模式解析器来确定通用文件命名模式,并在培训后对照列表运行它?如果我们考虑使用多种语言,这显然是一种徒劳的方法,但我只对检查英文文件名感兴趣。有很多随机性测试,因此为您发布的第一个测试将决定随机性的含义。恐怕做那个决定不是件小事。但是维基百科页面是一个很好的起点
好消息是,如果你只是想让它变得“相当混乱”,那么你可以采取一些合理的方法(即,计算成本低,而且通常足够好)。你所说的随机到底是什么意思?有很多方法可以回答这个问题 从技术上讲,这可能是“它们包含了多少熵”使用 既然你提到了字典,你的意思可能是“它们看起来像真单词吗?”这可以通过字母分布来检查长文本,但对于你显示的短名称,这将失败。相反,你可以尝试角色。这与字母频率相似,但适用于2/3字母序列。这意味着,如果你尝试使用bigrams,你会发现第一个单词包含“gv”、“vv”、“vc”、“cx”,这在任何英语单词中都是不可能找到的
还有其他方法可以回答这个问题,所以你必须弄清楚在这种情况下“随机”对你来说到底意味着什么。一个半粗略和快速的启发式检查是按单个字母对字符串进行排序,并将其排序序列与随机生成该长度序列的可能性进行比较。i、 e.对于字长2,字母表中给定26个字母的(排序)字符串“AA”的概率为1/(26*26),但由“AB”和“BA”生成的(排序)字符串“AB”的概率为2/(26*26) 另外,从编程的角度来看,另一种方法是对其运行拼写检查,并找出有多少“错误”。然后对其设置一个阈值。您可以尝试
我必须为一个源代码挖掘项目解决一个密切相关的问题,并开发了(用于“无意义字符串计算器”)。这个Python3包旨在确定在源代码挖掘过程中提取的字符串可能是类/函数/变量/等等标识符还是随机乱码。它也适用于真实文本,而不仅仅是程序标识符。鼻孔使用n-grams(类似于)结合自定义评分功能。它经过预训练,可以开箱即用 示例:下面的代码
from nostril import nonsense
real_test = ['bunchofwords', 'getint', 'xywinlist', 'ioFlXFndrInfo',
'DMEcalPreshowerDigis', 'httpredaksikatakamiwordpresscom']
junk_test = ['faiwtlwexu', 'asfgtqwafazfyiur', 'zxcvbnmlkjhgfdsaqwerty']
for s in real_test + junk_test:
print('{}: {}'.format(s, 'nonsense' if nonsense(s) else 'real'))
将产生以下输出:
bunchofwords: real
getint: real
xywinlist: real
ioFlXFndrInfo: real
DMEcalPreshowerDigis: real
httpredaksikatakamiwordpresscom: real
faiwtlwexu: nonsense
asfgtqwafazfyiur: nonsense
zxcvbnmlkjhgfdsaqwerty: nonsense
该项目正在进行中,我欢迎您的贡献。我们无法为您定义“随机”的含义。一旦你自己弄明白了这一点,你就有了问题的答案。你必须提供一个更好的“似乎是随机的”定义,因为随机生成的字符串产生类似“myfile”的东西的几率与产生“qzzyei”的几率一样大。这是随机性。这可能很有用:。您可能希望尝试询问。鉴于.exe和.com部分,字典似乎是使用基于字符串的距离函数的最佳选择。除此之外,您还可以构建一个已知可执行文件的列表,并标记不属于该列表的任何内容。以下哪一项是随机的(无需谷歌搜索):
nvvsvc.exe
、msseces.exe
或cvvil.exe
。其中两个是windows打包的公共服务,一个是“随机”嗯,这是个好主意,但这在实践中真的适用吗?AZ的文件名看起来不像AA那么随机?太好了,非常感谢。显然,这与一个能很好地回答这个问题的答案有关。@ChibuezeOpata:是的,我看到了一个,还有其他几个,但不是全部都是这样。这是一个有趣的问题,由于国际化(字符串是随机的还是来自另一种语言)和名称空间拥挤(迫使人们将登录名的字符串随机化以获得一个位置),它变得越来越难解决。事实上,从任何时候起,人类都在为自己制造问题。用户名/昵称可能在50年后被弃用。