验证码自动识别技术与实现毕业论文
2020-02-17 23:02:39
摘 要
为区分人和计算机,互联网上的很多服务都使用了验证码技术,例如论坛注册登录,电子邮箱申请,银行系统注册登录,金融商务系统的交易确认等等。最开始的验证码是普通字符验证码,然后是添加各种干扰严重扭曲的字符验证码,最新出现的还有图片、声音验证码。然而随着互联网技术的发展,尤其是信息技术应用于各类商业产品的快速发展,验证码这个基础防线面临的冲击日益强大。现如今,人们日常处理的验证码数量高达300万次以上,验证码识别技术的研究有益于提高提高网络的安全性,帮助开发人员设计出更加人性化,更加安全的验证码,为人们提供一个良好的网络环境,不仅如此,验证码识别结合了图像处理、机器学习等多个领域的研究,对于促进各个领域的技术研究具有重要意义。
本文基于VGGNet和AlexNet搭建了一个简单的卷积神经网络模型,并借助Python中的captcha批量生成带有噪声干扰和扭曲的字符验证码,然后通过这些验证码对卷积神经网络模型进行训练,最后用训练完成的模型来尝试破解验证码,在这个过程中评估验证码的安全程度以及实用性。
关键词:验证码;图像识别;机器学习;卷积神经网络
Abstract
To distinguish between people and computer, a lot of service on the Internet using the verification code technology, such as BBS registered login, email application, log in the banking system, financial business system trade confirmations and so on, at the beginning of captcha verification code is common characters, and then add the various interference seriously distorted captcha characters, the latest and pictures, voice verification code. However, with the development of Internet technology, especially the rapid development of information technology applied to all kinds of commercial products, the basic defense line of captcha is facing increasingly powerful impact. Nowadays, People's Daily processing as much as 3 million times more than the number of verification code, verification code recognition technology research is beneficial for improving the security of the network, to help developers to design more human, more secure authentication code, provide a good network environment for people, not only that, verification code identification combined with image processing, machine learning, and other fields of research, to promote technology research is of great significance in various fields.
In this paper, a simple convolutional neural network model is built based on VGGNet and AlexNet, and captcha in Python is used to generate character verification codes with noise interference and distortion in batches. Then, the model of convolutional neural network is trained with these verification codes, and finally, the completed model is used to try to crack the verification codes. Evaluate the security and utility of captchas during this process.
Key Words: captcha; Image recognition; Machine learning;cnn
目 录
摘 要 I
Abstract II
第1章 绪论 2
1.1 研究背景 2
1.2 国内外研究现状 5
1.3 本文研究内容及结构安排 6
第2章 基础理论及相关技术 7
2.1 验证码识别技术 7
2.1.1传统验证码字符识别技术 7
2.1.2 基于OCR的验证码字符识别技术 8
2.1.3基于卷积神经网络的字符识别 8
2.2 卷积神经网络 9
2.2.1卷积神经网络简介 9
2.2.2常见的卷积神经网络 11
2.2.3卷积神经网络的计算过程 13
2.3 本章小结 14
第3章 基于CNN的验证码识别 15
3.1需求分析 15
3.2 开发环境及开发过程 16
3.2.1开发环境 16
3.2.2验证码的生成 16
3.2.3卷积神经网络结构 17
3.3 实验测试 19
3.4本章小结 21
第4章 总结与展望 22
参考文献 23
致 谢 25
第1章 绪论
1.1 研究背景
验证码(CAPTCHA全自动区分计算机和人类的图灵测试)是一种查问应答测试用于确定用户是否是人类。这个词是Louis von ahn、Manuel bloom、Nicholas j. hopper和John lankford在2003年创造的[1]。这种形式的验证码机制要求用户输入失真图像的字母,有时图像上还会添加模糊的字母或数字序列。由于测试是由计算机执行的,与由人执行的标准图灵测试相反,验证码有时也被描述为反向图灵测试。
自从互联网出现之初,有些用户就不想让计算机准确识别文字。比如黑客,他们在互联网论坛上发布敏感话题,他们认为这些话题的关键词会被计算机自动监控。为了绕过计算机的检测,他们用相似的字符替换了一个单词。就像HELLO可以变成 |-|3|_|_()或)-(3££0,以及许多其他变形体,因此计算机不可能检测到所有这些变形体。这后来被称为leetspeak。如图一所示的图像验证码的发明也正是从这之中得到了灵感,通过字母的扭曲、形变来筛选出计算机和人类。
验证码最早的商业用途之一是在Gausebeck Levchin测试中。2000年,idrive.com开始使用验证码保护其注册页面,并准备为这项看似新奇的技术申请专利。2001年,PayPal将此类测试作为防止欺诈策略的一部分,要求人们“重新键入程序难以识别的扭曲字符”。最初,破解验证码的方式简单粗暴,就是靠人力。有人专门开办被称为“验证码农场”的公司,接收大量验证码然后由人输入。由于验证码是需要人通过测试的,所以这种方法理论无解。后来,OCR和机器学习等技术发展成熟起来。计算机检测图片中文字的能力越来越强。于是除了验证码更加扭曲,增加文字、增加干扰线、混淆背景色和文字颜色等如图1.1所示。还出现了一些新型验证码,比图1.2滑动式验证码、图1.3图标选择与行为辅助验证码、图1.4点击式的图文验证和行为辅助、语音验证码等。
图1.1 常见的图像验证码
图1.2 滑动验证码 图1.3 点击式验证码
图1.4 图标选择式验证码
2009年,谷歌收购了reCAPTCHA。2014年,谷歌正式抛弃了基于文字的验证码系统,代之以“我不是机器人”按钮。如图1.5所示,当用户进入了这个页面的时候,软件就开始收集各种信息,包括IP、cookies、时间、分辨率、鼠标的移动、键盘的操作等,当用户点击完成时,这些信息被服务器处理并最终判断,这是不是一个“人的操作”
图1.5 Google的reCAPTCHA
这套基于人工智能的系统还包含了二次测试,用户有时需要从图集中点选所有包含猫或其他事物的图像。如图一所示,2016年底,谷歌公布了新一代的验证系统Invisible reCaptcha,该系统的核心功能是基于一种高级风险分析技术。这套系统利用谷歌的人工智能技术来寻找人类行为的迹象。对鼠标的移动以及点击操作花费的时间进行检测。它从网页上移除了“我不是机器人”的选项框,转入幕后运行,Google官方表示,这套于2017年3月上线的隐形系统已经“让数百万人类用户每天无需任何点击就通过了验证”。除此之外,亚马逊公司开发出的一套验证码系统十分具有新意,它反其道而行之:在验证过程中表现糟糕的那个才是人类。根据开发者的说法,该系统的设计理念是基于由于人类有可能会在一些基本的逻辑测试中出错(比如,数出一句话中某个特定字母的数量),而机器却能轻松给出正确答案。
除了为用户防止bot欺诈,验证码还有了新的用途,谷歌还在2011年使用reCAPTCHA和CAPTCHA技术对《纽约时报》的档案和谷歌图书进行了数字化近年来,谷歌使用基于图像的验证码来改进其无人驾驶汽车数据集,识别树木和人行横道等物体。
验证码的发展过程中始终存在着安全性和易用性之间的斗争,一方面要验证码足够安全来保障网站的平稳运行,免受机器脚本的困扰,另一方面是要创造对用户友好的验证码系统,验证码的发明使得各类垃圾信息的产生速度受到极大地抑制,通过识别非人类的行为,验证码为网络信息安全做出了极大的贡献,但是过于复杂的验证码也让用户感到不便甚至“深恶痛绝”,这使得不少商业公司十分头疼。在人工智能不断发展的今天,验证码破解技术和验证码的生成技术形成了一个“矛与盾”的问题,计算机图像视觉技术的进步已经使得验证码失去了当初的意义,不再能发挥作用。正如CAPTCHA官网所解释的那样:“我们目前遇到的情况是要么是验证码没有被破解,我们有办法区分人和计算机;要么是验证码已经被破解,我们解决了一个人工智能问题。” 验证码肯定会随着时间的推移而变得更加复杂。这包括开发位图图像中包含的基于文本的字符的几种替代方法,传统的CAPTCHA不仅实用性有待加强,比如对残疾人来说仍然具有挑战性,而且它现在越来越不安全,现在无法完全准确的将人类与机器人模仿者区分开来。所以,对安全的验证码解决方案的需求仍然存在。因此,强烈建议在采用之前仔细考虑任何已部署解决方案的目的和有效性,然后密切监控其有效性能。与所有优秀的软件和在线内容供应一样,分析应首先仔细考虑系统要求并全面分析用户需求。总之,虽然一些验证码方法比其他方法更好,但目前还没有理想的解决方案。
1.2 国内外研究现状
验证码起源于国外,验证码识别的研究也在国外成为了一个较为热门的领域,2000年,idrive.com开始使用验证码保护其注册页面。验证码首次发挥巨大作用是在Yahoo公司,2003年验证码的出现解决当时困扰Yahoo的垃圾邮件泛滥事件,2005年,Larson K等人的研究表明计算机可以优先识别单个字符;这为验证码的破解提供了可行性方面的证明。此后各种破解验证码的方法不断被提出,2008年,Yan J, El Ahmad 通过研究验证码的特征,利用若干种字符分割技术来攻击包括微软、雅虎和谷歌设计的文本验证,成功率达到90%[2]。Huang S Y,等人针对MSN和Yahoo验证码提出一种基于projectin-based的分割算法,实验结果表明,该算法能够0.09到0.14的分割率[3]。2009年AM Sapkal等人对验证码字符做分段处理后成功识别[4]。2011年,斯坦福大学的计算机科学家破解了Audio captcha[5]。2013年,Gao等人提出了一种通用方法用于破解空心验证码的,这是第一次将一种统一的处理方式用来破解一系列验证码机制[6]。他们利用空心字符的特征来提取字符笔画块,然后尝试相邻笔画块的不同组合来构建单个字符。2013年,人工智能公司Vicarious宣布他们已经利用人工智能技术破解了Google的reCaptcha,2015 年,Karthik 等人提出了两种自动识别微软单层验证码的方法[7]。一种是基于模板匹配的方法,另一种是基于 CNN 的方法。Gao的团队报告了一种简单通用的文本验证码破解方法,这种方法第一次利用 Gabor 滤波器提取字符四个方向上的笔画块[8]。这种方法在多种文本验证码上都获得了很好的效果,包括字符分离验证码、空心验证码、字符粘连验证码,成功率从5% 到77%不等。Le提出了一个将 CNN 与递归神经网络(Recurrent Neural Network,RNN)结合的模型来破解图片文本验证码[9]。从此深度学习技术也逐渐成为验证码安全性分析的主要工具。2018年,田朝辉等人利用了CNN的经典模型破解了12306的验证码,图片识别率高达93.2%[10]。2019年LIU 提出了一种均衡分区破解验证码的方法[11]。Kumar提出一种自适应非线性增强退化词图像,用于改进分裂字符的识别[12]。
1.3 本文研究内容及结构安排
本文研究了使用卷积神经网络来识别图像验证码的技术。首先对时下流行的验证码识别方案进行了归案和总结,然后介绍了卷积神经网络的发展和技术原理,并对几大主流卷积神经网络进行了分析和归纳总结,最后搭建了一个卷积神经网络模型用于训练识别验证码。
根据本研究的内容,论文的各部分具体结构如下:
第一章绪论,介绍了验证码的特点及其发展过程,对验证码识别的研究背景做了总结性的叙述,并介绍了验证码识别国内外研究现状和研究成果,尤其是深度学习在验证码破解方面的应用进展,最后对本文的实现内容进行了简单的介绍,并对本论文的基本结构做了简要概括。
第二章是本研究所涉及到的基础理论和相关技术,主要介绍了目前主流的验证码识别方案,传统的图像识别技术与分类算法相结合;基于OCR的验证码识别以及本研究使用的基于卷积神经网络的图像识别。然后介绍了卷积神经网络的发展现状、基本组成和基本技术原理。
第三章算法实现和实验测试,首先介绍了python的开发环境PyCharm、Anaconda和Google的开源深度学习框架TensorFlow。NVIDIA的CUDA等工具,然后阐述了卷积神经网络模型的结果和设计原理。
第四章总结展望,对全文的工作做一个梳理总结,整理出不足的地方以待未来改进,提出下一步的工作计划。
第2章 基础理论及相关技术
2.1 验证码识别技术
验证码的运行是完全自动化的,几乎不需要人工维护或干预来管理,在成本和可靠性方面具有优势。所有用来生成验证码的算法必须进行公开,这样可能会对专利保护方面产生一些不利影响。但是这样做是为了使得验证码的破解不仅仅是通过逆向工程来破解揭露算法的秘密, 而是要通过解决人工智能(AI)领域的难题来正面破解验证码的保护机制,现代基于文本的验证码的设计要求同时使用三种独立的能力,即不变识别、分割以及正确地完成动态性的任务。
(1)不变识别是指识别字母形状发生大量变化的能力。对于人类大脑能够成功识别的每个字符,几乎有无数个变形版本。对计算机来说并非如此,教它识别所有这些不同的结构是一项极具挑战性的任务。
(2)在验证码中,由于字符被挤在一起,中间没有空格,将字母分割开来也是十分重要的。
(3)上下文也很重要,必须整体理解验证码,才能正确识别每个字符。例如,在验证码的一个片段中,字母可能看起来像一个“m”。只有把整个单词放在上下文中,它才会变得清晰,它是一个“u”和一个“n”。
即使是单独存在的,这些问题中的每一个都对计算机构成了巨大的挑战。同时存在这三种特点的验证码就更难解决了。与计算机不同,人类擅长于这类任务。虽然分割和识别是计算机理解图像所必需的两个独立过程,但对于人来说,它们是同一过程的一部分。例如,当一个人知道验证码的第一个字母是“a”时,这个人也知道这个“a”的轮廓在哪里,以及它与下一个字母的轮廓在哪里融合。此外,人类的大脑能够根据上下文进行动态思考。它能够保留多个解释,然后根据上下文线索为整个输入选择一个最佳解释。这也意味着它不会被字母的变化所欺骗。
2.1.1传统验证码字符识别技术
针对验证码的特点,传统的验证码识别技术一般是由图像处理和机器学习算法组成,如图2.1所示首先通过图像处理技术对图像进行预处理,然后通过不同的字符分割法将验证码分割为单独的字符,最后结合KNN、SVM等分类算法进行分类并得出最终结果完成字符识别。在这之中,预处理的方法一般包括图像灰度化、图像二值化、图像滤波等操作去除噪声[13]。图像分割算法通常具有垂直投影方法、上下轮廓差投影方法以及连通域分割方法。如果遇到字符扭曲粘连较难分割的情况是时,还可以采用形状上下文法进行整体识别,采用形状上下文作为形状描述子,对字符进行形状匹配识别,首先选取典型的样本作为标准字符库,提取这些字符的形状上下文,作为匹配时的标准特征,然后在对待测图像进行处理。
以上是毕业论文大纲或资料介绍,该课题完整毕业论文、开题报告、任务书、程序设计、图纸设计等资料请添加微信获取,微信号:bysjorg。
相关图片展示: