还剩2页未读,继续阅读
文本内容:
验证码的生成验证码的分类验证码依据其内容大致可以分为三类字符验证码Text.BasedCAPTCHA图像验证码Image.BasedCAPTCHA以及视频语音等验证码OtherCAPTCHA其中每一大类又包含若干子类字符验证码此类验证码是目前网络中的主流验证码,绝大多数网站均采纳此类验证码该验证码首先随机产生的一串字符,然后对字符进行一些处理,最终以图片的形式显示给用户,用户需要正确输入图片上的文字来完成验证每次页面加载时会产生不同的字符序列,可以抵挡简洁的自动攻击[1]简洁的验证码示例如下图所示图像验证码尽管字符验证码具有诸多优点,然而字符验证码有一个难以避开的缺点为了平安性增加字符扭曲粘连难度无疑降低了用户体验,部分网站验证码使得用户都难以看清,甚至需要刷新多次才能输入正确,影响用户扫瞄兴致因此,即基于图像的验证码悄然兴起,也开头渐渐的普及起来,这种验证码的特点是趣味性高,解答清楚图像验证码的示例如下图所示图
1.1选图验证码图
1.2滑动验证码其他验证码如如Gif动画验证码,手机短信验证码,视频验证码,语音验证码等针对字符验证码的生成算法设计字符验证码的主要设计思路主要分为前景图层和干扰图层的设计[2]其中,前景层主要是随机产生字符串,并对字符串进行一些特殊处理如扩大字符库规模设置多种字体,对字体进行随机形变处理、随机旋转字符、字符粘连等而干扰图层主要是生成一些干扰点、干扰线、字符等其他干扰因素,用于干扰和混淆图形验证码中的验证字符串,从而有效地加大图片识别难度使其成为真正有用的验证码最终将验证码绘制在有干扰点的背景图片上,用图片形式显示出系统给的随机码
2.1随机产生字符在选取候选字符时,首先会考虑数字和英文字符或者两者叠加使用,还可以考虑使用汉字字符,数字字符可取〜9英文字符可选取26个英文字母,其中,考虑到英文字母有大小写,可增加候选字符数组长度相比于数字和英文,汉字可选取的范围就大的多得多
2.2字符变形为了增加程序识别难度,必要的方法是尽量增加特征量库,使验证码能随机地具有不同的特征及特征值a)为每一个验证码汉字随机设置不同的字体,且字符字体是随机的,因此一个图形验证码中包含了各种不同的字体,不利于程序破解b)为每一个验证码随机的选择形变值,使每一个字符都有不同的形变结果,使简洁的破解算法失效在这个方面,笔者设置的变形效果包括字符随机向左扭曲、字符随机向右扭曲、进行放大镜效果处理,每一个字符经过这三种变换中的其中一种变换后,最终再进行随机旋转处理⑶字符随机向左、向右扭曲为了字符有扭曲效果,使程序难以辨别,但又不对人眼识别造成障碍,使这一个字符像素中的任意一行像素点相对应于上一行有0或1个像素宽度的向左(向右)偏差,任意一行的向左(向右)偏差值是由代码随机确定的之所以选择或1个像素宽度,是由于假如偏移量太多,会造成字符难以辨认;而假如都选择1个宽度,则相当于倾斜了45o不会有扭曲的效果经过这样的处理以后,字符有向左(向右)倾斜并有扭曲的趋势,破坏了汉字规章整齐的田字型结构,如图
2.1(a)、(b)所示(b)进行放大镜效果处理除了扭曲效果外,也可以对每个字符的不同部分进行放大或缩小处理,但这种放大或缩小必需是连续而缓慢的,否则简洁造成人眼识别困难图
2.1形变效果示例图(c)随机旋转处理单个字符经过扭曲或放大镜处理后,再对其进行随机旋转处理,使其随机顺时针或逆时针以字符中心点为圆心随机旋转0~150度由于现在图像处理技术和ORC技术的成熟,以上这些针对单个字符的形变处理就显得不特别牢靠当N个字符组合为一个图形验证码时,假如能使其相互粘连为一个完整的不易被正确分割的整体时,则程序识别时首先要将其正确的分割为N个部分后才能进行各个字符的识别,若它不能进行正确的分割,则就不行能进行正确的识别因此,这样做会给程序识别带来特别巨大的困难,而这正是产生文本验证码的重点所在但是这并不是说对单个字符的形变处理就变得可有可无正是由于字符不再具有字符原本的归整结构,才使程序分割时难以有特征可寻,降低了分割的正确率和单个字符匹配的正确率
2.3宇符粘连使字符粘连,给程序分割造成障碍主要分为以下四个步骤a)去除字符间的空白背景为了使每个字符变形时不破坏旁边字符的结构,让各个字符之间都间隔得比较远,因此经过变形后的每个字符之间,都还存在着肯定的空白而变形之后的字符所占的高、宽像素值及起始位置都发生了变化,为了去除字符间的空白背景,先要计算每个字符所占宽度的起始位置绝大多数的字符经过各种变形后,发觉其在横轴上的投影仍旧是连续的,因此打算以设定的字符颜色在横轴上的投影起始坐标作为字符的宽度起始值然而代码试验后却发觉了一个好玩的现象用Java程序在BMP或JPEG图像格式中显示经过各种变换的中文字符时,并非全部字符像素点的颜色都是设定的颜色c系列的,字符颜色会与背景颜色在颜色上有所交互影响,使这个汉字整体上看上去仍是C颜色的,但实际上它却包含了除c颜色外的一些其他颜色,特殊是字符与背景交接的边缘例如,当设定g.setBackgroundcolor.yellow;g.setcolorcolor.blue时,放大图像后会发觉字符边缘消失了除蓝色和黄色之外还有其他颜色,如淡绿色、青色、褐色等因此笔者以不是背景颜色的像素点在横轴上的投影起始点作为字符的宽度起始值,把W个字符的起始值纪录下来,然后据此消退字符之间的空白部分,同时缩短整个图形宽度从纪录下来的字符宽度可以看出经过变形后的字符宽度也呈现随机性,使一些依据字符所占宽度来进行分割字符的算法失效算法描述如下CharacterWidthba设置标志量sign为假;b对于b中的每一列像素若sign为假.且这一列包含字符像素,则存储这一列的横轴坐标值作为一个字符的宽度起始值,并且设置sign为真;若sign为真,且这一列不包含字符像素,则存储上一列的横轴坐标值作为一个字符的宽度结束值,并且设置sign为假;⑹对于前N—1个字符若这个字符与下个字符在宽度上存在空白间隔,则移除间隔部分,并依据移除的间隔宽度重新计算后面全部字符的宽度起始值;d返回bob随机上、下移动字符有了各个字符的起始位置后,随机产生一个・5〜5的整数,并依据这个随机数向上移动或向下移动每一个字符,使各个字符之间产生肯定程度的错落感这样做主要是有助于人眼识别,并且能使各个字符的位置更加随机化.增加机器分割的难度c字符拥挤效果经过上述步骤处理后,试验出来的图像仍没有抱负中那种拥挤的感觉主要问题就在于字符与背景交接的边缘存在其他色系而这种衍生出来的色系在字符主体的外围边缘上要占到1—3个像素,因此去掉这些衍生色系的像素不会影响到字符主体在代码中,为了使字符尽量拥挤但又不能影响人的识别,笔者把每一个字符的宽度起始值增加2个像素值,而把结束值缩小2个像素值,即删除字符中的前2列和最终2列像素由于删除的像素对字符整体的影响很小,各个汉字的构造差别也比较大,儿乎不会影响人对整个字符的识别但是对于机器来说,经过这个步骤的处理后,各个字符之间可能已经粘连在一起,很难用连通域法[6]和横轴映射法⑹将其分割开来由于汉字的构造比较简单,即使在每一个字符的随机位置处画一条一个像素宽度的背景色系的线段.人也能依据汉字的左右结构而识别出这个汉字来,因此对人的识别不会造成困难但是这样一来,机器程序就难以推断究竟哪几个部分构成了单个汉字,不利于它进行分割三.干扰图层设计干扰图层中的干扰信息是由干扰点、线、字符等其他干扰因素组成,其中这些干扰因素都可以是位置随机、颜色随机、字体随机、倾斜度随机等,且其中的干扰字符取自于同样候选字符数组,增加了干扰字符串与验证字符串的相像性,使其更不易被恶意程序所区分,降低了网络应用系统被胜利攻击的可能性随机产生干扰点可在背景图片中添加指定个数的干扰点,干扰点颜色随机,位置随机但不能影响验证码字符随机产生干扰线在图形上随机显示数十条长短不全都的干扰线,这些线的颜色可与字体颜色全都,用来干扰程序识别经过上述各种步骤处理之后,可以得到如图2所示的各种验证码图片这里令字体颜色为蓝色,背景颜色为黄色当然也可以设置随机的背景色和字体颜色,以增加特征量随机产生背景字符生成一个随机长度的位置随机、颜色随机、字体随机、倾斜度随机的字符串,并且取自于与前面同样候选字符数组,增加了干扰字符串与验证字符串的相像性字符的个数、位置、倾斜度和颜色是采用.NET—Framework供应的随机甬数Random来掌握的干扰字符取自于候选字符数组source中,这个.source数组由字母和数字组成首先,由一个随机对象rback—num来生成干扰图层的字符个数numnum的值由验证码图片的大小及其每个字符的大小打算然后运用循环结构,设置在候选字符数组source中随机生成的每个字符的随机位置、随机颜色和随机倾斜度并且需要设置一个标记值sign来标记num个字符中是否位置重合最终将生成的这些干扰字符串保存为一个图层对象,其生成的主要代码如下Randomrbacknum=newRandom//掌握背景字符个数intnuml=rhacknum.Next510;forinti=0;inumi;i++{intibacknum=rbaeknum.Nextsource.Len殍h;SolidBrushb=newSolidBrushColor.FromArgbrdl.Next255rdl.Next255rdl.Next255;intxbp2rdl.Nextrc.Width-2;//字符位置随机intybp=nil.Next咒.Height-2;//背景层字符颜色随机,字体大小和型号随机gh.DrawString80111C圮[ibaeknum]newFontfonts[rdl.Nextfonts.Length]rdl.NextmyPlatete.Height/4bxbpybp;.KChellapillaKLarsonPYSimardMCzerwinski.ComputersbeatHumansatSingleCharacterRecognitioninReadingbasedHumanInteractionProofsHIPs[J].ConferenceonEmailAnti-spam2005
[2]胡征兵,路红,廖龙龙.基于多图层的图形验证码生成技术讨论[J].COMPUTERANDMODERNIZATION20222
[6]YANJAHMADASE.Alow-cornattackonamicrosoftCAPTCHA[C]//Proeofthe15thACMConferenceonComputerandCommuni.cationsSecurityNewYork ACM
2022543.
554.。
个人认证
优秀文档
获得点赞 0