挑战视觉边界,探索图形验证码背后的黑科技

在日常生活中,我们登录网站或者其他平台时,在填写完账号密码之后,还会让我们填写4或6位的数字或者英文字母等,填写正确才能请求登录。这个其实是防止某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,如下图所示:

在这里插入图片描述

EasyCaptcha简介

现在,我们知道登录的时候需要填写验证码的原因,但图形验证码从何得来,是怎么生成的呢,这就需要我们去探索了。当然现在开源代码比较多,我这里推荐的就是一个开源的图形验证码,样式挺好看、类型也很多。

EasyCaptcha源码地址:https://gitee.com/ele-admin/EasyCaptcha

Java图形验证码,支持gif、中文、算术等类型,可用于Java Web、JavaSE等项目。

在这里插入图片描述

引入EasyCaptcha依赖

在IDEA中新建一个SpringBoot项目,版本为2.0以上的即可,在pom.xml中添加easycaptcha依赖,代码如下:

<!-- 图形验证码 -->
<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>18.0</version>
</dependency><dependency><groupId>com.github.whvcse</groupId><artifactId>easy-captcha</artifactId><version>1.6.2</version>
</dependency>

在项目中新建一个VerificationCode类,用来设置验证码图片的属性,包括宽度、高度、位数等操作。,代码如下:

    /*** 生成验证码图片的宽度*/private int width = 100;/*** 生成验证码图片的高度*/private int height = 30;/*** 生成验证码的位数*/private int digit = 4;/*** 生成的验证码code*/private String captchaCode;

接着在该类中新建一个生成验证码图形的方法。

    /*** 生成验证码** @return*/
public SpecCaptcha createVerificationCode() throws IOException, FontFormatException {// 三个参数分别为宽、高、位数SpecCaptcha specCaptcha = new SpecCaptcha(width, height, digit);// 设置字体specCaptcha.setFont(Captcha.FONT_9);// 设置类型,纯数字、纯字母、字母数字混合specCaptcha.setCharType(Captcha.TYPE_ONLY_NUMBER);// 验证码this.captchaCode = specCaptcha.text().toLowerCase();return specCaptcha;
}

我这里选择的是纯数字的类型,字体为FONT_9,在项目中可根据自己的需要进行修改。

接下来,写一个生成验证码的接口,将我们后端生成的数字以图片的格式返给前端展示。新建一个controller包,然后创建一个LoginController类。在该类中创建一个生成验证码的方法,并把图片以base64的格式输出,代码如下:

    @GetMapping("/captcha")public void getVerifyCode(HttpServletResponse response) throws IOException, FontFormatException {try {// 设置请求头为输出图片类型VerificationCode code = new VerificationCode();SpecCaptcha specCaptcha = code.createVerificationCode();// 创建字节数组输出流ByteArrayOutputStream baos = new ByteArrayOutputStream();// 将验证码图片输出到字节数组输出流中specCaptcha.out(baos);// 将字节数组转换为 Base64 编码byte[] imageBytes = baos.toByteArray();InputStream inStream = new ByteArrayInputStream(imageBytes);OutputStream outputStream = null;outputStream = new BufferedOutputStream(response.getOutputStream());//创建存放文件内容的数组byte[] buff = new byte[1024];//所读取的内容使用n来接收int n;//当没有读取完时,继续读取,循环while ((n = inStream.read(buff)) != -1) {//将字节数组的数据全部写入到输出流中outputStream.write(buff, 0, n);}//强制将缓存区的数据进行输出outputStream.flush();//关流outputStream.close();inStream.close();} catch (IOException e) {e.printStackTrace();}}

接下来,启动项目,然后在浏览器中,访问:http://localhost:8080/captcha地址,则就可以获取到图形验证码的图片。

在这里插入图片描述

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

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

相关文章

23111705[含文档+PPT+源码等]计算机毕业设计SSM框架美妆商城全套电商购物

文章目录 **软件开发环境及开发工具&#xff1a;****项目功能介绍&#xff1a;****论文截图&#xff1a;****实现&#xff1a;****代码片段&#xff1a;** 编程技术交流、源码分享、模板分享、网课教程 &#x1f427;裙&#xff1a;776871563 软件开发环境及开发工具&#xff…

接口自动化测试实战:JMeter+Ant+Jenkins+钉钉机器人群通知完美结合

前言 一、本地JAVA环境安装配置,安装JAVA8和JAVA17 二、安装和配置Jmeter 三、安装和配置ant 四、jmeter + ant配置 五、jenkins安装和配置持续构建项目 六、jenkins配置流程 前言 搭建jmeter+ant+jenkins环境有些前提条件,那就是要先配置好java环境,本地java环境…

uni-app 使用vscode开发uni-app

安装插件 uni-create-view 用于快速创建页面 配置插件 创建页面 输入页面名称&#xff0c;空格&#xff0c;顶部导航的标题&#xff0c;回车 自动生成页面并在pages.json中注册了路由 pages\login\login.vue <template><div class"login">login</d…

云课五分钟-08安装Opera成功-仓库中查找对应版本

前篇&#xff1a; 云课五分钟-07安装Opera失败-版本不匹配 视频&#xff1a; 云课五分钟-08安装Opera成功-仓库中查找对应版本 文本&#xff1a; 最佳的途径就是使用系统内置的FireFox。 这么折腾的主要是为了演示安装一个第三方程序可能遇到的问题&#xff0c;并给出一些思…

Jquery 通过class名称属性,匹配元素

UI自动化过程中&#xff0c;常常需要判断某个元素是否满足条件&#xff0c;再走不通的脚本逻辑&#xff1b;、本文介绍如何通过jquery判断菜单是否展开&#xff0c;来决定是否执行菜单展开脚本&#xff1b;Jquery通过class名称属性&#xff0c;匹配元素 我们先分析&#xff0c;…

生成对抗网络Generative Adversarial Network,GAN

Basic Idea of GAN Generation&#xff08;生成器&#xff09;  Generation是一个neural network&#xff0c;它的输入是一个vector&#xff0c;它的输出是一个更高维的vector&#xff0c;以图片生成为例&#xff0c;输出就是一张图片&#xff0c;其中每个维度的值代表生…

​软考-高级-系统架构设计师教程(清华第2版)【第8章 系统质量属性与架构评估(P286~319)-思维导图】​

软考-高级-系统架构设计师教程&#xff08;清华第2版&#xff09;【第8章 系统质量属性与架构评估&#xff08;P286~319&#xff09;-思维导图】 课本里章节里所有蓝色字体的思维导图

Typora for Mac:打造全新文本编辑体验

Typora for Mac是一款与众不同的文本编辑器&#xff0c;它不仅拥有直观易用的界面&#xff0c;还融合了Markdown语法和富文本编辑的功能&#xff0c;为用户带来了前所未有的写作和编辑体验。 一、简洁明了的界面设计 Typora for Mac的界面简洁明了&#xff0c;让用户可以专注…

【UE】属性同步发送和接收源码分析

概述 UE只有Actor类有属性同步功能&#xff0c;Actor开启属性同步的前提是Actor的bReplicated属性为true&#xff0c;属性同步只有Server可以往Client同步&#xff0c;NetDriver类中负责发送和接收属性同步数据&#xff0c;在Server端每帧调用UNetDriver::TickFlush&#xff0…

【AI视野·今日CV 计算机视觉论文速览 第279期】Tue, 31 Oct 2023

AI视野今日CS.CV 计算机视觉论文速览 Tue, 31 Oct 2023 Totally 165 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computer Vision Papers SimMMDG: A Simple and Effective Framework for Multi-modal Domain Generalization Authors Hao Dong, Ismail Nejjar, …

开源与闭源软件的辩论:对大模型技术发展的影响

目录 前言1 开源软件的优缺点1.1 开源软件的优点1.2 开源软件的缺点和挑战 2 闭源软件的优缺点2.1 闭源软件的优点2.2 闭源软件的缺点和挑战 3 大模型发展会走向哪一边结语 前言 近期&#xff0c;特斯拉CEO马斯克公开表示&#xff1a;OpenAI不该闭源&#xff0c;自家首款聊天机…

自建es数据迁移阿里云方案

一、ElasticSearch数据迁移方法介绍 https://help.aliyun.com/document_detail/170095.html?spma2c4g.26937906.0.0.429240c9ymiXGm 可以通过Logstash、reindex和OSS等多种方式完成阿里云Elasticsearch间数据迁移、Elasticsearch数据迁移至Openstore存储中、自建Elasticsear…