防范近似字符串匹配

时间:2015-12-22 13:41:37

标签: string algorithm string-matching irc

如何更改字符串,以使近似字符串匹配的变体不能与原始字符串匹配?

我制作了一个基于频道日志文件运行游戏的IRCbot。它打印日志中的引号,玩家通过猜测"谁说它"来收集点数。这个频道相当令人讨厌,其中一个玩家花了不到30分钟就建立了一个每次赢得比赛的机器人。我意识到手动作弊也很容易且无法防范,但可以认为这是自动机器人之间的竞争。我想更新我的机器人,以便任何完全自动化的机器人都无法玩游戏:)

我考虑从引号中随机删除字符,但agrep仍然可以匹配字符串。我考虑用类似的替代角色替换一些角色,但这对于逆向工程来说是微不足道的。我正在寻找难以打破的想法。

示例行:

[14:15] <baobot> [QUOTE 13/15] Who famously declared "minulla ainakin paperin tekemisessä 1% ajasta menee algon suunnitteluun ja 99% menee paperin kirjoittamiseen"?

3 个答案:

答案 0 :(得分:1)

以ascii-art打印您的报价。

使用与命令行工具figlet或厕所(explaination)类似的东西。

以下是一个简单示例:例如string2ascii-generator

为了帮助您入门,您可能希望从figlet复制源代码。

答案 1 :(得分:1)

任何可用于加扰的东西都很可能被解读。以下是您的实验的一些建议:

  • 如果第一个和最后一个字母到位并且内部部分被扰乱,人类可以阅读单词。

  • 您也可以进行替换,例如精英说话,用数字替换一些字符。

  • 您可能能够找到其他语言中对使用的字母看起来很熟悉的其他字符,这意味着您也可以随机替换它们。

  • 您还可以尝试随机化空格的位置。因此,将它们从原始位置移开然后移动它们,或完全移除它们。

  • 反转一些词语。

  • 找到用英语拼写单词的方法......&#34; ph&#34;听起来像&#34; f&#34;所以你可以找到并替换它们中的一些。

  • 尝试上面不同的组合,删除所有空格,CaMEl CaSE单词,然后进行字符替换等。

总的来说,有很多方法可以帮助让它变得更难,但是如果你每次都遵循固定的模式,那么它就可以更容易地编程来解除它。如果你随机做了不同的事情,那么一个输入可以产生几个不同的输出,那么某人编写一个程序来反转这个过程会更难。

答案 2 :(得分:0)

使用Google翻译。

例如,我将你的报价用于俄语,然后用英语,然后回到芬兰语,然后得到

  

Mininla on ainakin 1%ajasta kirjassa otetaan suunnittelussa Algon ja 99%menee kirjoituspaperia

我不知道这是不是一个正确的芬兰语;至于可以说它仍然有点可识别。如果您认为它对于近似搜索来说太容易识别,请进行更多中间翻译。