[Hei.Captcha] Asp.Net Core 跨平台验证码实现
写在前面
说起来比较丢脸。我们有个手机的验证码发送逻辑需要使用验证码,这块本来项目里面就有验证码绘制逻辑,.Net Framework的,使用的包是System.Drawing
,我把这验证码绘制逻辑复制到.Net Core的新项目引用对比包System.Drawing.Common
,windows下面验证码正常,CentOs下面死活不能正常,像这样:
(左边为CentOs运行结果,右为Windows)
- 依赖库检查安装;
- 字体检查安装;
- 逻辑检查;
折腾了一天多放弃了,决定重新写。
我看了市面上的各种验证码,使用第三方的,免费的都有很多限制,并随时有可能开始收费(用户量上去后就收费,俗称“养猪”);
有些比较大平台的已经开始收费或者即将收费(无可厚非,不点名);
视野有限,没有都一一了解到,如果有免费的,限制又比较少的,使用体验不错的第三方验证码,欢迎留言~~
综上,我决定自己绘制
选择图片绘制库
GitHub上面我看到比较多星的是:
综合考虑后选择了:ImageSharp
官方文档:https://sixlabors.github.io/docs/
成果
Hei.Captcha
.net core,跨平台的验证码生成工具包,支持动态gif验证码。基于ImageSharp。
使用.NET Standard 2.0,目前仅测试过.net core的支持,.net frameword 4.6.1 及以上请自行测试~
中文泡泡验证码
字母数字组合验证码
动态gif中文泡泡验证码
动态gif字母数字组合验证码
表单示例
使用
Install-Package Hei.Captcha
//StartUp.cs,Method ConfigureServices()
services.AddHeiCaptcha();
private readonly SecurityCodeHelper _securityCode;
public HomeController(SecurityCodeHelper securityCode)
{
this._securityCode = securityCode;
}
/// <summary>
/// 泡泡中文验证码
/// </summary>
/// <returns></returns>
public IActionResult BubbleCode()
{
var code = _securityCode.GetRandomCnText(2);
var imgbyte = _securityCode.GetBubbleCodeByte(code);
return File(imgbyte, "image/png");
}
/// <summary>
/// 数字字母组合验证码
/// </summary>
/// <returns></returns>
public IActionResult HybridCode()
{
var code = _securityCode.GetRandomEnDigitalText(4);
var imgbyte = _securityCode.GetEnDigitalCodeByte(code);
return File(imgbyte, "image/png");
}
/// <summary>
/// gif泡泡中文验证码
/// </summary>
/// <returns></returns>
public IActionResult GifBubbleCode()
{
var code = _securityCode.GetRandomCnText(2);
var imgbyte = _securityCode.GetGifBubbleCodeByte(code);
return File(imgbyte, "image/gif");
}
/// <summary>
/// gif数字字母组合验证码
/// </summary>
/// <returns></returns>
public IActionResult GifHybridCode()
{
var code = _securityCode.GetRandomEnDigitalText(4);
var imgbyte = _securityCode.GetGifEnDigitalCodeByte(code);
return File(imgbyte, "image/gif");
}
高级
参照Demo, 通过修改/丰富应用程序运行目录./fonts
目录下的字体文件,生成更多不同字体组合的验证码。
总结
滑块验证码、点击选择验证码、轨迹验证码等的实现时间成本,技术要求都比较高,并且各种防破解上面可能也需要花很多时间。综合需求考虑选择了个性价比比较高的“土味”验证码绘制方案;
本验证码我自己也没有去尝试去破解过,不知道破解难度,有兴趣的同学试试,能告诉我结果就最好了[比心]
验证码肉眼辨认上面,可能稍难体验差了点。自己修改下泡泡的数量,绘制的参数改改,代码不多,都有备注。
希望能帮到大家,也希望大家积极PR,丰富验证码样式。
源码
喜欢留个星~
https://github.com/gebiWangshushu/Hei.Captcha
参考
https://sixlabors.github.io/docs/
[Hei.Captcha] Asp.Net Core 跨平台验证码实现的更多相关文章
- 在Azure Container Service创建Kubernetes(k8s)群集运行ASP.NET Core跨平台应用程序
引子 在此前的一篇文章中,我介绍了如何在本地docker环境中运行ASP.NET Core跨平台应用程序(http://www.cnblogs.com/chenxizhang/p/7148657.ht ...
- 《ASP.NET Core跨平台开发从入门到实战》Web API自定义格式化protobuf
<ASP.NET Core跨平台开发从入门到实战>样章节 Web API自定义格式化protobuf. 样章 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于 ...
- 新的开始 接触ASP.NET Core跨平台的框架
今天我刚学习了使用Visual Studio 2015新建了.NET Core项目写了一个小的CSHTML代码.按我的话说就是,把C#和HTML合起来使用了,写了一个简单的关于学生的“增” “删” “ ...
- asp.net core跨平台开发从入门到实战文摘
第1章 .NET Core 第2章 dotnet命令 第3章 VS Code安装及介绍 第4章 VS2015开发.NET Core 第5章 ASP.NET Core 第6章 EF Core 第7章 A ...
- asp net core 跨平台初体验
标: 在 ubuntu 16.04 上部署一个 asp.net core 站点,打开网站后显示一段文字. 安装 net core 运行环境:ubuntu 16.04 LTS 1.添加 apt 源 ...
- 在Docker中运行asp.net core 跨平台应用程序
概述 Docker已经热了有一两年了,而且我相信这不是一个昙花一现的技术,而是一个将深远影响我们日后开发和部署.运营应用系统的一种创新(很多人将其作为devops的一种非常重要的基石).学习docke ...
- asp.net core 图片验证码,后台验证
验证方法: public static string VerificationCodeCacheFormat="vcode_cache_{0}"; public IActionRe ...
- asp.net core跨平台--CentOS7.2部署asp.net core网站
随着vs2015 2017的发布,.NETCore越来越流行了,我就尝试着做了个demo,在centos上试着运行了一下,中间遇到很多问题,不过最后还是成功运行,记录一下过程.废话不多说,直接开始: ...
- Centos 配置ASP.Net Core 运行环境
一:ASP.Net Core跨平台运行,需要在Linux安装运行环境.本机器使用的Centos,下载安装地址为:https://www.microsoft.com/net/core#centos su ...
随机推荐
- Sqoop 的基本使用
目录 一.Sqoop 基本命令 1. 查看所有命令 2. 查看某条命令的具体使用方法 二.Sqoop 与 MySQL 1. 查询MySQL所有数据库 2. 查询指定数据库中所有数据表 三.Sqoop ...
- Hadoop 学习之路(五)—— Hadoop集群环境搭建
一.集群规划 这里搭建一个3节点的Hadoop集群,其中三台主机均部署DataNode和NodeManager服务,但只有hadoop001上部署NameNode和ResourceManager服务. ...
- 【设计模式】行为型07备忘录模式(Memento Pattern)
参考地址:http://www.runoob.com/design-pattern/memento-pattern.html 对原文总结调整,以及修改代码以更清晰的展示: 备忘录模式(快照模式): ...
- composer-laravel-China源和官方源
composer config -g repo.packagist composer https://repo.packagist.org composer config -g repo.packag ...
- 新补充 JSSSS
条件语句 补充: var a=“hello world” a这个变量是字符串了 对于里面每一个字母来说 他是字节 里面有11个字节 字节总数用length表示 如下: 根据上面的内容咱们又发现了一个运 ...
- PCA(主成分分析)算法
设有\(m\)个指标,\(n\)个样本的原始数据 将原始数据按列组成矩阵 \(X _ { n \times m }\) 将\(X\) 的每一列进行中心化 求\(X\)的协方差矩阵\(\Sigma _ ...
- 设计模式-访问者模式(Visitor)
访问者模式是行为模式的一种.访问者模式的基本想法是,软件系统中拥有一个由许多对象构成的.比较稳定的对象结构,这些对象的类都拥有一个accept方法用来接受访问者的访问.访问者是一个接口,它拥有一个vi ...
- 该如何真正进入SEO行业?
今天一个多年的朋友突然问我这个问题,他作为一个seo局外人,感觉SEO挺神秘,我认为要入行就要先了解一个SEO是什么职业,它的工作有那些,然后再考虑怎样进行学习或培训. 一.查看网站状态 seo人员每 ...
- 2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest D:Distribution in Metagonia(构造)
http://codeforces.com/gym/100801/attachments 题意:给出一个数n(1 <= n <= 1e18),将 n 拆成 m 个整数,其中 m 必须是 2 ...
- python中的内置函数的思维导图
https://mubu.com/doc/taq9-TBNix