题外话,有网友说,这玩意根本很容易破解,确实是这样。但验证码这东西,就跟锁子很类似,防君子不防小人。验证码的发明其实是社会文明的退步。因为它阻碍了真正的使用者,却无法阻挡别有用心的人。但又有什么办法呢?

上一篇文章添加了一些基本类,本篇内容主要目的是创建一些接口类

上一节内容:


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两个示例)

NET 6 实现滑动验证码(三)、接口的更多相关文章

  1. thinkphp整合系列之极验滑动验证码

    对于建站的筒子们来说:垃圾广告真是让人深恶痛绝:为了清净:搞个难以识别的验证码吧:又被用户各种吐槽:直到后来出现了极验这个滑动的验证码:这真是一个体验好安全高的方案:官网:http://www.gee ...

  2. python验证码识别(2)极验滑动验证码识别

    目录 一:极验滑动验证码简介 二:极验滑动验证码识别思路 三:极验验证码识别 一:极验滑动验证码简介   近些年来出现了一些新型验证码,不想旧的验证码对人类不友好,但是这种验证码对于代码来说识别难度上 ...

  3. 一步步实现滑动验证码,Java图片处理关键代码

    最近滑动验证码在很多网站逐步流行起来,一方面对用户体验来说,比较新颖,操作简单,另一方面相对图形验证码来说,安全性并没有很大的降低.当然到目前为止,没有绝对的安全验证,只是不断增加攻击者的绕过成本. ...

  4. Python——破解极验滑动验证码

    极验滑动验证码 以上图片是最典型的要属于极验滑动认证了,极验官网:http://www.geetest.com/. 现在极验验证码已经更新到了 3.0 版本,截至 2017 年 7 月全球已有十六万家 ...

  5. 使用python实现滑动验证码

    首先安装一个需要用到的模块 pip install social-auth-app-django 安装完后在终端输入pip list会看到 social-auth-app-django social- ...

  6. python爬虫21 | 对于b站这样的滑动验证码,不好意思,照样自动识别

    今天 要来说说滑动验证码了 大家应该都很熟悉 点击滑块然后移动到图片缺口进行验证 现在越来越多的网站使用这样的验证方式 为的是增加验证码识别的难度 那么 对于这种验证码 应该怎么破呢 接下来就是 学习 ...

  7. 用Python写一个滑动验证码

    1.准备阶段 滑动验证码我们可以直接用GEETEST的滑动验证码. 打开网址:http://www.geetest.com/ ,找到技术文档中的行为验证,打开部署文档,点击Python,下载ZIP包 ...

  8. gsxt滑动验证码

    最后,谈谈滑动验证码. 目前,工商网站已经全面改版,全部采用了滑动验证码,上面绝大多数思路都失效了.对于滑动验证码,网上能搜到的解决方案基本都是下载图片,还原图片,算出滑动距离,然后模拟js来进行拖动 ...

  9. 爬虫(十二):图形验证码的识别、滑动验证码的识别(B站滑动验证码)

    1. 验证码识别 随着爬虫的发展,越来越多的网站开始采用各种各样的措施来反爬虫,其中一个措施便是使用验证码.随着技术的发展,验证码也越来越花里胡哨的了.最开始就是几个数字随机组成的图像验证码,后来加入 ...

  10. 利用selenium库自动执行滑动验证码模拟登陆

    破解流程 #1.输入账号.密码,然后点击登陆 #2.点击按钮,弹出没有缺口的图 #3.针对没有缺口的图片进行截图 #4.点击滑动按钮,弹出有缺口的图 #5.针对有缺口的图片进行截图 #6.对比两张图片 ...

随机推荐

  1. nginx中 location正则的理解

    文章转载自:http://blog.csdn.net/wzj_110/article/details/110142902 正则表达式在线测试工具:http://tool.lu/regex loca ...

  2. Kubernetes 日志:搭建 EFK 日志系统

    Kubernetes 中比较流行的日志收集解决方案是 Elasticsearch.Fluentd 和 Kibana(EFK)技术栈,也是官方现在比较推荐的一种方案. Elasticsearch 是一个 ...

  3. 使用yum方式安装的openresty参数

    nginx version: openresty/1.19.3.1 built by gcc 8.3.1 20190311 (Red Hat 8.3.1-3) (GCC) built with Ope ...

  4. Jenkins 中使用 Git Parameter 插件动态获取 Git 的分支

  5. MongoDB 单实例节点主机的用户和权限一般操作步骤

    步骤总结: 1.先正常启动 2.创建用户,创建数据库病授权用户 3.关闭程序,开启安全,然后启动 4.使用账号和密码连接 按未开启认证的方式(配置文件中没开启安全选项并且启动命令中不添加 --auth ...

  6. PAT (Basic Level) Practice 1020 月饼 分数 25

    月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量.总售价.以及市场的最大需求量,请你计算可以获得的最大收益是多少. 注意:销售时允许取出一部分库存.样 ...

  7. 条件期望:Conditional Expectation 举例详解之入门之入门之草履虫都说听懂了

    我知道有很多人理解不了 "条件期望" (Conditional Expectation) 这个东西,有的时候没看清把随机变量看成事件,把 \(\sigma\)-algebra 看成 ...

  8. MergeOption.NoTracking的使用

    前两天项目维护出现一个bug,报错信息是提交出错:AcceptChanges 无法继续,因为该对象的键值与 ObjectStateManager 中的另一个对象冲突.请在调用 AcceptChange ...

  9. input框限制只能输入数字的两种方法

    方法一: <input type="text"   oninput="value=value.replace(/[^\d.%]/g,'')"> 方法 ...

  10. zookeeper之安装

    zookeeper之安装 一.准备条件 1.1 最低三个服务器(一主多从,1个leader,多个flower)1.2 将zookeeper安装包上传到集群并解压zookeeper 二.将conf目录下 ...