40

[Hei.Captcha] Asp.Net Core 跨平台图形验证码实现 - 乔达摩

 4 years ago
source link: https://www.cnblogs.com/xiaxiaolu/p/11280000.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
1564587704793

说起来比较丢脸。我们有个手机的验证码发送逻辑需要使用验证码,这块本来项目里面就有验证码绘制逻辑,.Net Framework的,使用的包是System.Drawing,我把这验证码绘制逻辑复制到.Net Core的新项目引用对比包System.Drawing.Common,windows下面验证码正常,CentOs下面死活不能正常,像这样:

1564588228422

(左边为CentOs运行结果,右为Windows)

  • 依赖库检查安装;
  • 字体检查安装;
  • 逻辑检查;

折腾了一天多放弃了,决定重新写。

我看了市面上的各种验证码,使用第三方的,免费的都有很多限制,并随时有可能开始收费(用户量上去后就收费,俗称“养猪”);

有些比较大平台的已经开始收费或者即将收费(无可厚非,不点名);

视野有限,没有都一一了解到,如果有免费的,限制又比较少的,使用体验不错的第三方验证码,欢迎留言~~

综上,我决定自己绘制

选择图片绘制库

GitHub上面我看到比较多星的是:

SixLabors / ImageSharp

dlemstra / Magick.NET

mono / SkiaSharp

综合考虑后选择了:ImageSharp

官方文档:https://sixlabors.github.io/docs/

Hei.Captcha

.net core,跨平台的验证码生成工具包,支持动态gif验证码。基于ImageSharp

使用.NET Standard 2.0,目前仅测试过.net core的支持,.net frameword 4.6.1 及以上请自行测试~

中文泡泡验证码

img

1564563919705

1564563740706

字母数字组合验证码

img

1564563801717

1564563816361

1564563853298

1564563877047

动态gif中文泡泡验证码

641760-20190808002124541-905943437.gif

641760-20190808002117478-1968880626.gif

641760-20190808002110346-765250856.gif

动态gif字母数字组合验证码

641760-20190808002103990-1798329769.gif

641760-20190808002057310-1913235284.gif

641760-20190808002049739-505891417.gif

1565146764062
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/


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK