对于一个会图形算法的程序员来说,前端验证码中,滑块验证码是最容易被破解的验证码之一,如果要我给现在流行的验证码破解难度排个序,那么我这么排:滑块验证码、数字验证码、数字干扰验证码、文字顺序验证码、图形顺序验证码、图形匹配验证码,语顺验证码、短信验证码。

注:本文为发布者本人原创,所述内容仅代表作者个人观点

下图中滑块验证码我通过图片算法获取到缺口,代码敲完用时不到5分钟!数字干扰验证码指得是在数字验证码图片中加入一些干扰线。

各种验证码的破解难度

文字顺序验证码指得是给出指定文字,按照顺序点击图片中的文字顺序的方式,比如给出“你好世界”这四个字,然后,只要根据“你好世界”这四个字的语顺点击图片对应位置即可。

图形顺序验证码指得是给出数个特定形状的图形,按照图形顺序点击图片中的特定的图形。比如说给出三张特定形状的图形,在下方图片上,有与之对应的图形嵌入,只不过,可能会比给出的图形大,也有可能会比给出的图形小,但是,只要按照顺序点击对应图形即可。

图形匹配验证码指得是给出一个特定形状的图形,然后再给出数个图片,点击包含了特定形状图形的图片即可,比如给了一个茶壶形状的图形,然后下方有九张图片,其中有三张是包含各种茶壶的图片的,点击对了即可。

语顺验证码指得是没有任何包含形状、文字等提示信息,通过顺序点击图片中文字的语顺来完成验证,比如说图片中有“你”、“世”、“好”、“界”四个字,按照顺序点击,那么语顺应该是“你”、“好”、“世”、“界”。

为什么说滑块验证码是最容易破解的验证码之一呢?因为现在大多数滑块验证,图片的缺口部分基本上都是呈暗色,这其实在图形算法中是很容易被找到的,当缺口被找到,只要代码模拟鼠标滑动滑块到缺口处即可,这对于图形算法,或者说是机器视觉来说找到它的难度最小。

而相对滑块,数字验证码的破解难度次之,很多人可能认为数字验证码应该难度最低才对,其实数字验证码相较于滑块,难点主要还是在于字体上,虽然数字好匹配,但是如果字体模板经常变的话,可能会给破解带来一定的难度。因为数字识别是要用到模板的,每个模板都对应一种字体,当有种字体不在模板之内,那么自然也就增加了识别的难度了。但,这也仅仅只是减缓了数字验证码的破解效率而已,当模板越来越成熟时,其实相较于滑块,破解难度也就不相上下了。

而在数字验证码基础上增加一些线条干扰或者噪点干扰,这会增加破解难度,但是现在的图形算法技术,去除这些干扰还是绰绰有余的。

文字顺序验证码破解难度基本上和数字验证码差不多,主要是识别文字和识别数字一样没有太大难度,难度在于如何和图片中的文字做匹配,因为图片中图案背景的颜色是不均匀的,因此可能造成干扰,那么破解率就会降低。

图形顺序验证码基本上和文字顺序验证码的逻辑是差不多的,这里就不展开说了。

图形匹配验证码和语顺验证码最难破解

图形匹配验证码一般给的示例图片是一个像素图形,即一个图形的轮廓,但是,下方给出的图片中一般表现与之匹配的确是实物图片,比如示例图片展示的是一个茶壶的轮廓,但是,下方图片给出的却是几张包含茶壶实物的照片,使用图形算法根本就做不到与之对应。

语顺也是一样的,语顺其实就是自然语言的输出顺序,比如“你好世界”这四个字的语言输出顺序基本上是不会变的,这种光靠图片识别算法也是搞不定的!

总结

如此一来,我们就可以发现,图形验证码中,最安全的应该是图形匹配验证码和文字顺序验证码,基本上单纯靠图片视觉算法是无法破解的。

但是,随着现在AI的兴起,一些AI在经过训练以后,所有验证码在它们的面前可能都不是问题。
但不考虑AI的情况下,大家如果对于安全性要求比较高,应该知道用什么验证码比较合适了吧?想要完全保险,建议使用实时性比较高的短信验证码!