【发布时间】:2009-05-14 19:01:47
【问题描述】:
这个问题类似于盲目的 SQL 注入。目标是确定字符串的确切值,您唯一能做的测试是查看您指定的 DOS 样式通配符(?= 任意字符,* = 任意数量的任意字符)是否与字符串匹配。 (所以实际上你只能访问bool DoesWildcardMatch(string wildcard) 函数)。
直接的方法是测试a*, b*, c*...,直到找到第一个字母,然后重复。我能想到的一些优化:
- 搜索
*a*, *b*等确定字符集 - 找到
*x*上的匹配项时,执行divide-et-impera (*a*x*, *b*x*, ...)
【问题讨论】:
-
关于字符串的各种问题:字符集可以是什么?只允许字母还是其他字符?字符串可以有多长?小写/大写重要吗?
-
我真的不明白这些信息将如何帮助您想出一个有效的算法,但既然你问了 - 在我的特殊情况下,字符串是一个 Internet 主机名,所以它是字母数字和几个符号,如 .和 -.
-
大小写无所谓 - ?完全匹配一个符号,* 匹配零个或多个符号,并且每个其他符号都完全匹配该符号(如果不区分大小写,您可以认为小写和大写符号相等)。字母表也无关紧要(除了如何处理字母表中的 ? 和 * )。如果对字母大小、字符串长度、符号频率或字母大小与字符串长度的比率有任何假设,可能会很有趣。
标签: algorithm string wildcard brute-force