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.对比两张图片 ...
随机推荐
- 2.1pip的安装和使用
我们都知道python有海量的第三方库或者说模块,这些库针对不同的应用,发挥不同的作用.我们在实际的项目中,或多或少的都要使用到第三方库,那么如何将他人的库加入到自己的项目中内呢? 打个电话?大哥你好 ...
- Kibana: 运用Data Visualizer来分析CSV数据
- python 代码执行顺序
Python代码在执行过程中,遵循下面的基本原则: 普通语句,直接执行: 碰到函数,将函数体载入内存,并不直接执行 碰到类,执行类内部的普通语句,但是类的方法只载入,不执行 碰到if.for等控制语句 ...
- Maven快速配置和入门
概念 Maven其实就是一个管理项目.构建项目的工具.它有标准化的项目结构.构建流程.依赖管理. 功能 Maven提供了一套标准的项目结构 Maven提供了一套标准的构建流程 Maven提供了更便捷的 ...
- 高光谱图像分类简述+《Deep Learning for Hyperspectral Image Classification: An Overview》综述论文笔记
论文题目<Deep Learning for Hyperspectral Image Classification: An Overview> 论文作者:Shutao Li, Weiwei ...
- Linux+Wine玩GTA5指南
如果你的系统没有Wine先装Wine和winetricks,Wine在各大发行版的源都能找到.记住32位和64位的Wine都要装 安装wget后,输入指令 sudo -s cd /opt mkdir ...
- KTV和泛型(3)
泛型除了KTV,还有一个让人比较疑惑的玩意,而且它就是用来表达疑惑的:? 虽然通过泛型已经达到我们想要的效果了,例如: List<String> list = new ArrayList& ...
- 齐博x1标签之无刷新显示更多
示范代码如下: <div class="ListMoreInfos"> {qb:tag name="news_list_page_listdata02&quo ...
- golang中的变量阴影
索引:https://waterflow.link/articles/1666019023270 在 Go 中,在块中声明的变量名可以在内部块中重新声明. 这种称为变量阴影的原理很容易出现常见错误. ...
- Redis 02: redis基础知识 + 5种数据结构 + 基础操作命令
Redis基础知识 1).测试redis服务的性能: redis-benchmark 2).查看redis服务是否正常运行: ping 如果正常---pong 3).查看redis服务器的统计信息: ...