NET 6 实现滑动验证码(三)、接口
题外话,有网友说,这玩意根本很容易破解,确实是这样。但验证码这东西,就跟锁子很类似,防君子不防小人。验证码的发明其实是社会文明的退步。因为它阻碍了真正的使用者,却无法阻挡别有用心的人。但又有什么办法呢?
上一篇文章添加了一些基本类,本篇内容主要目的是创建一些接口类
上一节内容:NET 6 实现滑动验证码(二)、基本数据
ValidateResult.cs
在项目根目录下,创建ValidateResult.cs。其功能是提供验证后返回的信息
namespace SlideCaptcha
{
public class ValidateResult
{
public ValidateResultType Result { get; set; }
public string Message { get; set; }
public static ValidateResult Success()
{
return new ValidateResult { Result = ValidateResultType.Success, Message = "成功" };
}
public static ValidateResult Fail()
{
return new ValidateResult { Result = ValidateResultType.ValidateFail, Message = "验证失败" };
}
public static ValidateResult Timeout()
{
return new ValidateResult { Result = ValidateResultType.Timeout, Message = "验证超时" };
}
public enum ValidateResultType
{
Success = 0,
ValidateFail = 1,
Timeout = 2
}
}
}
ICaptcha.cs
在Interface文件夹下,建一个ICaptcha.cs,用于生成验证码和进行校验。
using SlideCaptcha.Model;
using System.Threading.Tasks;
namespace SlideCaptcha.Interface
{
public interface ICaptcha
{
/// <summary>
/// 生成验证码
/// </summary>
/// <param name="captchaId">验证码id</param>
/// <returns></returns>
Task<CaptchaData> GenerateCaptchaImageAsync(string type, string captchaId = null);
/// <summary>
/// 校验
/// </summary>
/// <param name="captchaId">验证码id</param>
/// <param name="slideTrack">滑动轨迹</param>
/// <returns></returns>
ValidateResult Validate(string captchaId, SlideTrack slideTrack);
}
}
IResourceHandler.cs
IResourceHandler.cs 用于生成验证码资源(验证码模板)。
using SlideCaptcha.Model;
using System.Threading.Tasks;
namespace SlideCaptcha.Interface
{
public interface IResourceHandler
{
/// <summary>
/// 判断传入的资源类型是否存在
/// </summary>
/// <param name="handlerType"></param>
/// <returns></returns>
bool CanHandle(string handlerType);
/// <summary>
/// 生成资源
/// </summary>
/// <param name="resource"></param>
/// <returns></returns>
Task<byte[]> Handle(Resource resource);
}
}
IResourceHandlerManager.cs
IResourceHandlerManager.cs用于根据资源(验证码模板),获取资源byte[]数据。
using SlideCaptcha.Model;
using System.Threading.Tasks;
namespace SlideCaptcha.Interface
{
public interface IResourceHandlerManager
{
/// <summary>
/// 根据资源,生成所需要的byte[]
/// </summary>
/// <param name="resource"></param>
/// <returns></returns>
Task<byte[]> Handle(Resource resource);
}
}
IResourceManager.cs
IResourceManager.cs用于获取验证码背景数据与验证码模板数据
using System.Threading.Tasks;
namespace SlideCaptcha.Interface
{
public interface IResourceManager
{
/// <summary>
/// 随机获取验证码图片背景
/// </summary>
/// <returns></returns>
Task<byte[]> RandomBackground();
/// <summary>
/// 随机获取模板
/// </summary>
/// <param name="type">模板类型,滑动、旋转、点选</param>
/// <returns></returns>
Task<(byte[], byte[])> RandomTemplate(string type);
}
}
IResourceProvider.cs
IResourceProvider.cs用于提供验证码背景图片与模板图片的List
using SlideCaptcha.Model;
using System.Collections.Generic;
namespace SlideCaptcha.Interface
{
public interface IResourceProvider
{
/// <summary>
/// 提供验证码背景图片
/// </summary>
/// <returns></returns>
List<Resource> Backgrounds();
/// <summary>
/// 提供模板资源
/// </summary>
/// <returns></returns>
List<TemplatePair> Templates();
}
}
ISliderCaptchaImageGenerator.cs
ISliderCaptchaImageGenerator.cs用于生成滑动验证码
using SlideCaptcha.Model;
using System.Threading.Tasks;
namespace SlideCaptcha.Interface
{
public interface ISliderCaptchaImageGenerator
{
/// <summary>
/// 生成滑动验证码
/// </summary>
/// <param name="captchaId">验证码ID</param>
/// <returns></returns>
Task<SliderImageCaptchaInfo> Generate(string captchaId);
}
}
IStorage.cs
IStorage.cs 用于缓存的操作
using System;
namespace SlideCaptcha.Interface
{
public interface IStorage
{
/// <summary>
/// 设置缓存
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="value"></param>
/// <param name="absoluteExpiration"></param>
void Set<T>(string key, T value, DateTimeOffset absoluteExpiration);
/// <summary>
/// 获取缓存
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
T Get<T>(string key);
/// <summary>
/// 删除缓存
/// </summary>
/// <param name="key"></param>
void Remove(string key);
}
}
IValidator.cs
IValidator.cs 用于提供校验验证码数据。
using SlideCaptcha.Model;
namespace SlideCaptcha.Interface
{
public interface IValidator
{
/// <summary>
/// 校验验证码数据
/// </summary>
/// <param name="slideTrack">滑动</param>
/// <param name="captchaValidateData">校验</param>
/// <returns></returns>
bool Validate(SlideTrack slideTrack, CaptchaValidateData captchaValidateData);
}
}
下载地址(包括验证码源码、服务端API示例、前端代码有HTML+JQyeryt、vue3两个示例)
https://pan.baidu.com/s/19mx24FXrnqz9u2mmFqlr6g?pwd=7636
NET 6 实现滑动验证码(三)、接口的更多相关文章
- thinkphp整合系列之极验滑动验证码
对于建站的筒子们来说:垃圾广告真是让人深恶痛绝:为了清净:搞个难以识别的验证码吧:又被用户各种吐槽:直到后来出现了极验这个滑动的验证码:这真是一个体验好安全高的方案:官网:http://www.gee ...
- python验证码识别(2)极验滑动验证码识别
目录 一:极验滑动验证码简介 二:极验滑动验证码识别思路 三:极验验证码识别 一:极验滑动验证码简介 近些年来出现了一些新型验证码,不想旧的验证码对人类不友好,但是这种验证码对于代码来说识别难度上 ...
- 一步步实现滑动验证码,Java图片处理关键代码
最近滑动验证码在很多网站逐步流行起来,一方面对用户体验来说,比较新颖,操作简单,另一方面相对图形验证码来说,安全性并没有很大的降低.当然到目前为止,没有绝对的安全验证,只是不断增加攻击者的绕过成本. ...
- Python——破解极验滑动验证码
极验滑动验证码 以上图片是最典型的要属于极验滑动认证了,极验官网:http://www.geetest.com/. 现在极验验证码已经更新到了 3.0 版本,截至 2017 年 7 月全球已有十六万家 ...
- 使用python实现滑动验证码
首先安装一个需要用到的模块 pip install social-auth-app-django 安装完后在终端输入pip list会看到 social-auth-app-django social- ...
- python爬虫21 | 对于b站这样的滑动验证码,不好意思,照样自动识别
今天 要来说说滑动验证码了 大家应该都很熟悉 点击滑块然后移动到图片缺口进行验证 现在越来越多的网站使用这样的验证方式 为的是增加验证码识别的难度 那么 对于这种验证码 应该怎么破呢 接下来就是 学习 ...
- 用Python写一个滑动验证码
1.准备阶段 滑动验证码我们可以直接用GEETEST的滑动验证码. 打开网址:https://www.geetest.com/ ,找到技术文档中的行为验证,打开部署文档,点击Python,下载ZIP包 ...
- gsxt滑动验证码
最后,谈谈滑动验证码. 目前,工商网站已经全面改版,全部采用了滑动验证码,上面绝大多数思路都失效了.对于滑动验证码,网上能搜到的解决方案基本都是下载图片,还原图片,算出滑动距离,然后模拟js来进行拖动 ...
- 爬虫(十二):图形验证码的识别、滑动验证码的识别(B站滑动验证码)
1. 验证码识别 随着爬虫的发展,越来越多的网站开始采用各种各样的措施来反爬虫,其中一个措施便是使用验证码.随着技术的发展,验证码也越来越花里胡哨的了.最开始就是几个数字随机组成的图像验证码,后来加入 ...
- 利用selenium库自动执行滑动验证码模拟登陆
破解流程 #1.输入账号.密码,然后点击登陆 #2.点击按钮,弹出没有缺口的图 #3.针对没有缺口的图片进行截图 #4.点击滑动按钮,弹出有缺口的图 #5.针对有缺口的图片进行截图 #6.对比两张图片 ...
随机推荐
- Netty内存池的整体架构
一.为什么要实现内存管理? Netty 作为底层网络通信框架,网络IO读写必定是非常频繁的操作,考虑到更高效的网络传输性能,堆外内存DirectByteBuffer必然是最合适的选择.堆外内存在 JV ...
- 2022-9-5 JavaSE note
Java SE 1.IDEA基本操作 psvm + 回车 : main() 方法声明 sout + 回车 : = System.out.println(); Ctrl + D : 把当前行复制到下一行 ...
- Kubernetes(K8S)特性有哪些?
Kubernetes简介 Kubernetes是一个开源的,用于管理云平台中做个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单且高效,Kubernetes提供了应用部署,规划 ...
- Containerd 知识点
1.查看安装Containerd的版本 # ctr --version ctr github.com/containerd/containerd v1.6.6 # ctr version Client ...
- centos7使用yum方式安装MySQL5.7
yum -y localinstall http://mirrors.ustc.edu.cn/mysql-repo/mysql57-community-release-el7.rpm yum inst ...
- 查看pod创建时使用yaml文件内容
除了 kubectl describe pod 以外,另一种获取 Pod 额外信息(除了 kubectl get pod)的方法 是给 kubectl get pod 增加 -o yaml 输出格式参 ...
- 【前端必会】tapable、hook,webpack的灵魂
背景 什么是tapable.hook,平时做vue开发时的webpack 配置一直都没弄懂,你也有这种情况吗? 还是看源码,闲来无聊又看一下webpack的源码,看看能否找到一些宝藏 tapable和 ...
- NSIS查找文本中是否包含某个字串
!include "textfunc.nsh"!include "logiclib.nsh"OutFile "find.exe"#文本文件a ...
- 【SDOI2013】 项链 题解
Solution 将原问题分为两个问题求解. Part 1 首先求珍珠的种类数. 设\(f_i\)表示满足\(gcd = i\)的本质不同珍珠个数, \(g_i\)表示满足\(gcd\)为\(i\)的 ...
- python学习笔记----必备知识
一.必备知识 二.流程控制 https://blog.csdn.net/weixin_43304253/article/details/120778228 1.1语法特点: 1.1.1 代码注释 单行 ...