标签:int res random 验证码 split 算数 zhi 破解
计算型验证码
算数验证码,也叫计算型验证码。
计算型验证码其实是一种特殊的字符型验证码,只不过在它的基础上增加了数字运算。
计算型验证码在将人类视觉和计算机视觉的差异作为区分用户和电脑的依据的同时,还加上了逻辑运算,从而来增加机器识别的难度。
Python 提供了专门的库用于破解计算性验证码——Ddddocr
破解方式
Ddddocr 其实是一种 OCR,可以将图形识别后得到字符串,字符串中带有运算符
第一步:安装
pip install ddddocr
第二步:准备一张图片,图片命名为 '验证码.jpg'
第三步:使用 Ddddocr
import ddddocr ocr = ddddocr.DdddOcr() with open('验证码.jpg', 'rb') as f: img_bytes = f.read() f.close() res = ocr.classification(img_bytes) print(res) # 47+40
第四步:编写程序,对识别得到的字符串进行运算
if'+'in res: zhi = int(res.split('+')[0])+int(res.split('+')[1][:-1]) print(zhi) if'-'in res: zhi = int(res.split('+')[0])-int(res.split('+')[1][:-1]) print(zhi) if'*'in res: zhi = int(res.split('+')[0])*int(res.split('+')[1][:-1]) print(zhi) if'/'in res: zhi = int(res.split('+')[0])/int(res.split('+')[1][:-1]) print(zhi)
第五步:大功告成
制作验证码
我们也可以自己编写一个程序用于形成一个算数型验证码
from PIL import Image,ImageDraw,ImageFont import random def getRandomColor(): # 获取一个随机的rgb格式颜色 r = random.randint(0, 255) g = random.randint(0, 255) b = random.randint(0, 255) return (r,g,b) def getRandomStr(): # 获取一个随机字符串,其中每个字符也是随机的 num_random = str(random.randint(1,50)) return num_random text ='' for i in range(3): if i != 1: k = getRandomStr()+' ' else: k = random.choice(['+','-','*','/'])+' ' text += k text = text+' = ' # 获取一个Image对象,参数分别是:RGB格式,宽120,高40,随机颜色 image = Image.new('RGB',(160,40),(255,255,255)) # 获取一个画笔对象,将图片对象传过去 draw = ImageDraw.Draw(image) # 获取一个font字体对象,参数是ttf的字体文件的目录,以及字体的大小 font = ImageFont.truetype(r'K:\msyh.ttc',size=24) # 在图片上写东西,参数是定位、字符串、颜色和字体 draw.text((10,10),text,getRandomColor(),font=font) image.save('验证码.jpg')
参考:https://mp.weixin.qq.com/s/Yvo0ucKIU8Fpm-GZ-vxOfA
标签:int,res,random,验证码,split,算数,zhi,破解 来源: https://www.cnblogs.com/zhuminghui/p/15132352.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。