使用.Net Core实现的一个图形验证码
SimpleCaptcha是一个使用简单,基于.Net Standard 2.0的图形验证码模块。它的灵感来源于Edi.Wang的这篇文章https://edi.wang/post/2018/10/13/generate-captcha-code-aspnet-core,我将其中生成验证码的代码抽取出来进行封装得到了这个模块。下面介绍一下使用方式。
基本使用方式
安装SimpleCaptcha
在Nuget中搜索安装SimpleCaptcha

安装缓存模块
SimpleCaptcha依赖Microsoft.Extensions.Caching.Abstractions模块用来存储验证码,所以你需要在项目中根据自己的需要安装相应的实现包,例如这里我使用Microsoft.Extensions.Caching.Memory
Startup
修改Startup.cs文件注入相应的服务:
services.AddMemoryCache()
.AddSimpleCaptcha(builder =>
{
builder.UseMemoryStore();
});
注入ICaptcha接口
在Controller中注入核心接口ICaptcha
private readonly ICaptcha _captcha;
public HomeController(ICaptcha captcha)
{
_captcha = captcha;
}
生成验证码
使用ICaptcha接口的Generate方法生成验证码
public IActionResult Captcha(string id)
{
var info = _captcha.Generate(id);
var stream = new MemoryStream(info.CaptchaByteData);
return File(stream, "image/png");
}
验证
使用ICaptcha接口的Validate方法对用户的提交进行验证
public IActionResult Validate(string id, string code)
{
var result = _captcha.Validate(id, code);
return Json(new { success = result });
}
完整的例子可以在这里找到:https://github.com/1992w/SimpleCaptcha/tree/master/src/SimpleCaptcha.Demo
配置
SimpleCaptcha预留了一些默认的配置项,你可以根据需要自行修改。
设置验证码长度
services.AddSimpleCaptcha(builder =>
{
builder.AddConfiguration(options =>
{
options.CodeLength = 6;
});
});
设置图片大小
services.AddSimpleCaptcha(builder =>
{
builder.AddConfiguration(options =>
{
options.ImageWidth = 100;
options.ImageHeight = 36;
});
});
设置区分大小写
默认情况下验证不区分大小写
services.AddSimpleCaptcha(builder =>
{
builder.AddConfiguration(options =>
{
options.IgnoreCase = false;
});
});
设置验证码有效期
验证码默认的有效期为5分钟
services.AddSimpleCaptcha(builder =>
{
builder.AddConfiguration(options =>
{
options.ExpiryTime =TimeSpan.FromMinutes(10);
});
});
设置字符集
SimpleCaptcha提供了ICaptchaCodeGenerator接口用来生成字符,默认的实现是从字符集012346789ABCDEFGHIJKLMNOPQRSTUVWXYZ中随机生成,你可以继承ICaptchaCodeGenerator接口实现自己的需求。
public class MyCaptchaCodeGenerator : ICaptchaCodeGenerator
{
public string Generate(int length)
{
throw new NotImplementedException();
}
}
配置自己的生成器
services.AddSimpleCaptcha(builder =>
{
builder.AddConfiguration(options =>
{
options.CodeGenerator = new MyCaptchaCodeGenerator();
});
});
设置个性化的图片
如果默认生成的图片你觉得不符合你的要求,你可以实现ICaptchaImageGenerator接口进行修改
public class CaptchaImageGenerator : ICaptchaImageGenerator
{
public byte[] Generate(int width, int height, string captchaCode)
{
throw new NotImplementedException();
}
}
services.AddSimpleCaptcha(builder =>
{
builder.AddConfiguration(options =>
{
options.ImageGenerator = new CaptchaImageGenerator();
});
});
源代码
所有源代码可以在这里获取:https://github.com/1992w/SimpleCaptcha
感谢
在这里感谢Edi.Wang分享。
最后
欢迎你对这个模块提出任何的建议和想法。
使用.Net Core实现的一个图形验证码的更多相关文章
- 程序员不装x能行?先给登录来一个图形验证码!(canvas实现)
细心的同学可以发现,现在很多网站当登录多次之后就会出现一个图形验证码,或是当提交表单.或点击获取手机验证码等等场景都会有图形验证码的出现. 那么图形验证码是为了解决什么问题而出现的呢? 什么是图形验证 ...
- ASP.NET中如何生成图形验证码
通常生成一个图形验证码主要 有3个步骤: (1)随机产生一个长度为N的随机字符串,N的值可由开发可由开发人员自行设置.该字符串可以包含数字.字母等. (2)将随机生成的字符串创建成图片,并显示. (3 ...
- Tornado框架实现图形验证码功能
图形验证码是项目开发过程中经常遇到的一个功能,在很多语言中都有对应的不同形式的图形验证码功能的封装,python 中同样也有类似的封装操作,通过绘制生成一个指定的图形数据,让前端HTML页面通过链接获 ...
- 笔记——Springboot response、ServletOutputStream、图形验证码显示慢
今天遇到一个图形验证码加载很慢的问题,大概耗时有200~500毫秒左右. 根据追踪,图形验证码图片生成耗时0~1毫秒,而response.getOutputStream.write()将图片写入前台页 ...
- 前端登录jq图形验证码
<!DOCTYPE html><html lang="zh"><head> <meta charset="UTF-8" ...
- 【web 安全测试思路】图形验证码对服务器的影响
前言 图片验证码是为了防止恶意破解密码.刷票.论坛灌水等才出现的,但是你有没有想过,你的图形验证码竟然可能导致服务器的崩溃? 利用过程 这里以phpcms为例,首先需要找一个图形验证码. 将图片拖动到 ...
- jmeter 获取图形验证码接口测试
今天开发提测了一个图形验证码的接口,以前没有测过这个,上来有点懵..... 记录一下. 使用jmeter配置好接口和参数,运行后查看结果树,显示都是乱码 解决方法: 添加一个后置处理器--beansh ...
- SpringSceurity(3)---图形验证码功能实现
SpringSceurity(3)---图形验证码功能实现 有关springSceurity之前有写过两篇文章: 1.SpringSecurity(1)---认证+授权代码实现 2.SpringSec ...
- 【java+selenium3】自动化cookie操作+图形验证码处理 (十五)
一.cookie操作 1.获取浏览器所有的cookie import java.util.Set; import org.openqa.selenium.Cookie; //获取浏览器所有的cooki ...
随机推荐
- Java实现 洛谷 P1579 哥德巴赫猜想(升级版)
题目背景 1742年6月7日哥德巴赫写信给当时的大数学家欧拉,正式提出了以下的猜想:任何一个大于9的奇数都可以表示成3个质数之和.质数是指除了1和本身之外没有其他约数的数,如2和11都是质数,而6不是 ...
- Java实现最大连续乘积子数组
1 问题描述 给定一个浮点数组,任意取出数组中的若干个连续的数相乘,请找出其中乘积最大的子数组. 2 解决方案 2.1 蛮力法 该方法的时间复杂度为O(n^2). package com.liuzhe ...
- java实现第六届蓝桥杯表格计算
表格计算 某次无聊中, atm 发现了一个很老的程序.这个程序的功能类似于 Excel ,它对一个表格进行操作. 不妨设表格有 n 行,每行有 m 个格子. 每个格子的内容可以是一个正整数,也可以是一 ...
- java实现第六届蓝桥杯分机号
分机号 X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列,且不能有重复的数位.比如: 751,520,321 都满足要求,而, 766,918,201 就不符合要求. ...
- github下载速度太慢,这里有已经下载完的nacos-server.zip组件
nacos: 分布式系统微服务的注册中心和配置中心 .. 在微服务系统中,起到很重要的作用.小伙伴老是给我抱怨,说这个github下面很慢慢,半天下载不下来,所有这样呢,我就把已经下载好的 nacos ...
- tensorflow2.0学习笔记第一章第三节
1.3鸢尾花数据读入 # 从sklearn包datasets读入数据 from sklearn import datasets from pandas import DataFrame import ...
- 「MoreThanJava」Java发展史及起航新世界
「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...
- 在k8s上部署日志系统elfk
日志系统elfk 前言 经过上周的技术预研,在本周一通过开会研究,根据公司的现有业务流量和技术栈,决定选择的日志系统方案为:elasticsearch(es)+logstash(lo)+filebea ...
- 在Asp.NET Core中如何优雅的管理用户机密数据
在Asp.NET Core中如何优雅的管理用户机密数据 背景 回顾 在软件开发过程中,使用配置文件来管理某些对应用程序运行中需要使用的参数是常见的作法.在早期VB/VB.NET时代,经常使用.ini文 ...
- [转] 间接系统调用syscall(SYS_gettid)
点击阅读原文 在linux下每一个进程都一个进程id,类型pid_t,可以由 getpid()获取. POSIX线程也有线程id,类型pthread_t,可以由 pthread_self()获取,线程 ...