[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字母数字组合验证码#
表单示例#
使用#
(0.2.0及以下版本)开始之前需先把字体文件https://github.com/gebiWangshushu/Hei.Captcha/tree/master/Demo/fonts整个fonts目录下载放到程序根目录(如果只想下载一个文件夹可以使用chrome插件:GitZip for github)
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://www.cnblogs.com/xiaxiaolu/p/11280000.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
声明:本博客版权归「乔达摩(嘿~)」所有,转载文章须在显眼位置标明来源!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?