网站验证码的生成原理、难度控制,及python实现...

news/2024/5/5 12:32:17/文章来源:https://blog.csdn.net/cpongo1/article/details/89548146

图片验证码已经广泛的使用在各种反爬虫的场景中,验证码的的生成验证过程对于开发者来说是零成本的,对于用户体验来说可能稍差、但是对于爬虫来说是致命的和高成本的。


下面将介绍使用python实现网站验证码的产生及验证的全过程,然我们对验证码的生成有所理解,同时对于机器识别在验证码利于的作用有个认识。


其过程是是用户请求验证后,生成验证码图片并后台session保存验证的字符串,当用户提交验证信息后,取出后台session中的字符集对比,相同的则验证通过。

def get(self):
from PIL import Image, ImageDraw, ImageFont
import random
# 定义变量,用于画面的背景色、宽、高
bgcolor = (random.randrange(20100), random.randrange(20100), 255)
width = 100
height = 25
# 创建画面对象
im = Image.new('RGB', (width, height), bgcolor)
# 创建画笔对象
draw = ImageDraw.Draw(im)
# 调用画笔的point()函数绘制噪点
for i in range(0100):
xy = (random.randrange(0, width), random.randrange(0, height))
fill = (random.randrange(0255), 255, random.randrange(0255))
draw.point(xy, fill=fill)
# 定义验证码的备选值
str1 = 'ABCD123EFGHIJK456LMNOPQRS789TUVWXYZ0'
# 随机选取4个值作为验证码
rand_str = ''
for i in range(04):
rand_str += str1[random.randrange(0, len(str1))]
# 构造字体对象
font = ImageFont.truetype('static/fonts/STLITI.TTF'23)
# 构造字体颜色
fontcolor = (255, random.randrange(0255), random.randrange(0255))
# 绘制4个字
draw.text((52), rand_str[0], font=font, fill=fontcolor)
draw.text((252), rand_str[1], font=font, fill=fontcolor)
draw.text((502), rand_str[2], font=font, fill=fontcolor)
draw.text((752), rand_str[3], font=font, fill=fontcolor)
del draw
session["verifycode"] = rand_str
buf = io.BytesIO()
im.save(buf, 'png')
self.set_header('Content-Type''image/jpg')
self.write(buf.getvalue())


session["verifycode"] = rand_str是在网站后台的session中保存正确的验证值,在post提交登陆后进行对比。


buf = io.BytesIO()、im.save(buf, 'png')是创建bytes类型的内存对象用于保存生成的图片数据。


self.set_header('Content-type','image/jpg')

self.write(buf.getvalue()),构件response相应对象返回前端。


效果如下:

2019-03-22-17_16_17.png

2019-03-22-17_16_17.png

2019-03-22-17_16_17.png

效果还是不错,生成验证码的复杂度和字符集相关、和字体相关、和噪点相关,也可以生成表达式类型的验证码,同时因为采取随机生成,几百万张图片中也不会存在相同的图片,可见验证码对于反爬虫而言任然是最简单、无成本的反爬虫措施。


------------------------------


ID:Python之战


|作|者|公(zhong)号:python之战 


专注Python,专注于网络爬虫、RPA的学习-践行-总结


喜欢研究技术瓶颈并分享,欢迎围观,共同学习。


独学而无友,则孤陋而寡闻!


---------------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_736912.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#实现一直疯狂get访问一个网站

好无聊,哈哈,就写了个这玩意,也没什么技术含量using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;using System.Net;using System.Threading;namespace aotoHttpGet{class Program{static…

JAVA游戏停产_烽火18台系列之十四:应急处置“网站一键关停”

前不久,“永恒之蓝“病毒肆虐整个互联网,各网络安全管理员们纷纷忙于打补丁、拔网线、做封堵,那种”想哭“的感觉还记忆犹新,那幅手忙脚乱的画面还历历在目。网络安全工作的重点已经从“防御”一切可能的攻击逐渐转向提升应对攻击…

网站程序有漏洞怎么修复和查找漏洞

ecshop目前最新版本为4.0,是国内开源的一套商城系统,很多外贸公司,以及电商平台都在使用,正因为使用的人数较多,很多攻击者都在挖掘该网站的漏洞,就在最近ecshop被爆出高危漏洞,该漏洞利用跨站伪…

java和seo学那个_seo和java哪个更好

一个seo行业站点,科学的内容制作应该与seo相关,且内容本身是有人搜索的。seo和java哪个更好是有人搜索的语句,且与seo是强相关的,对于seo教程自学网来讲,这样的内容再适合不过了。任何一门技术,如果精通&am…

网站被黑导致被西部数码关闭 提示有害信息未处理的解决方案...

前段时间有一客户的网站打不开了,打开网站被提示什么:抱歉,主机因存在有害信息逾期未处理被关闭 Sorry, the site now can not be accessed. 客户第一时间找到我们SINE安全寻求解决方案,我们根据客户的反馈,进行详细的记录&#x…

百度站长平台的正确使用方式,seoer必备技能!

seo技术指标:如何查看网站的变化利用百度站长平台最为准确,都知道百度自己的产品,当然统计出来的数据也是最为准确的。第一:把网站添加到百度站长平台中去: 搜索资源平台--站点管理 点开站点管理,添加自己的…

家乡网站的设计与实现_博客网站的设计与实现(工具篇)

一、系统的设计目标目标:能够注册用户,用户可以创建自己的博客,而且用户间可以互动。二、开发工具及安装配置MyEclipse,Navicat for MySQL1.1 MyEclipse1、简介:MyEclipse是在eclipse 基础上加上自己的插件开发而成的功能强大的企…

小白在阿里云云服务器上如何发布自己的网站(建站|详细)...

昨天发的小白在阿里云云服务器上如何发布自己的网站(建站|详细),今更新一下 一、选购云服务器 到阿里云官网进行选购1.1 使用学生优惠购买使用学生优惠后为118元/年1.2 市场价购买如果是没有学生优惠的话,请用市场价购买 阿里云还…

网站高可用架构--一

网站的可用性(Availability)描述网站可有效访问的特征。 网站可用性的度量与考核网站可用性度量2.网站可用性考核 可用性指标是网站架构设计的重要指标。从管理层面,可用性指标是网站或者产品的整体考核指标,具体到每个工程师的考…

PageAdmin CMS网站建设教程:自动任务执行时间设置...

PageAdmin Cms发布文章时候有一个上线时间设置和下线时间设置,网站编辑人员可以利用这个功能来实现定时发布,在信息发布界面,如下图: 设置后就会自动加入定时任务中,注意这个功能需要再系统设置>>自动任务执行间…

物流公司网站模板_物流企业网站模板下载

网站模板下载地址:http://www.pageadmin.net/moban/1144.cshtml介绍:物流公司网站模板,DivCss结构,代码干净,搜索引擎更易收录,网站模板精心设计制作,用于物流公司,品牌官方网站的网…

外贸网站最好用的5大WordPress插件【必须安装】

网站装修好了,但是很多细节,很多功能都不能满足,例如我自己是做SEO出来的,所以有些SEO标签没有做好,我自己会觉得很膈应。 因为世界上存在的网站60%都是用wordpress来做的,这就给wordpress插件很好的生存环…

寻找海量数据集用于大数据开发实战(维基百科网站统计数据)

在学习spark的过程中,除了经典的WrodCount例子(用于统计文本文件中的单词出现次数),我们也在寻找其他海量数据来做更多实战以提高自己,今天介绍的是一个海量数据集的下载方法,以及数据内容的简介&#xff1…

spark实战之:分析维基百科网站统计数据(java版)

在《寻找海量数据集用于大数据开发实战(维基百科网站统计数据)》一文中,我们获取到维基百科网站的网页点击统计数据,也介绍了数据的格式和内容,今天就用这些数据来练习基本的spark开发,开发语言是Java; 实战环境信息 …

网站建设中标签的使用:Tag优化标准文档

Tag 中文译作标签、书签。在很多网站中,由于导航无法承载更多的信息分类,而内容量又过大的时候,使用TAG来更加有效地组织网站结构和内容。 一、Tag来源 是代表某些内容(文字、图片、音频、视频)的关键词或词组&#xf…

bluePen – 使用在线 CSS 编辑器美化你的网站

BluePen 是一款非常强大的样式编辑工具,甚至可以轻松地安装在一个动态的网站中。一旦你已经安装了它,你就可以在任何时间,任何地方修改样式表,一切修改将实时更新到您的浏览器(但不是线上网站),…

5个基于Linux命令行的文件下载和网站浏览工具

命令行是GNU/Linux中最神奇迷人的部分,它是非常强大的工具;命令行本身功能多样,多种内建或者第三方的命令行应用使得Linux变得更加健壮和强大。Linux Shell支持多种不同类型的网络应用,无论是BT下载软件,专用下载器或者互联网冲浪…

采用建站cms制作企业网站的好处

随着网络的发展和普及,现在各行各业开展业务都离不开网络推广,而网络营销推广的标配就是企业必须有一个企业网站,目前做企业网站制作主要有两个方法,一种找网络公司开发,一种利用cms来制作网站,那么建站cms…

中国.net域名网站的“前世今生”,那些年的光辉

1987年9月的一天,中国的第一封电子邮件成功发出,邮件的内容大致是“跨越长城,走向世界”,在当时,没有人会想到十年后中国的互联网开始萌芽,并发展成今天的繁荣。1994年,“巴黎统筹委员会”的解散…

大型网站技术架构(1)

为什么80%的码农都做不了架构师?>>> 网站都是从小网站一步一步发展为大型网站的,而这之中的挑战主要来自于庞大的用户、安全环境恶劣、高并发的访问和海量的数据,任何简单的业务处理,一旦需要处理数以 P 计的数据和面…