zoukankan      html  css  js  c++  java
  • [Hei.Captcha] Asp.Net Core 跨平台图形验证码实现

    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

    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中文泡泡验证码

    动态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/

  • 相关阅读:
    Large repunit factors (Project Euler 132)
    有向图 加最少的边 成为强连通分量的证明 poj 1236 hdu 2767
    ZJU 17th 校赛
    2015-2016ACM-ICPC NEER northern-subregional-contest C Concatenation
    BestCoder Round #93 ABC
    Codeforces Round #404 (Div. 2) DE
    Fibonacci数列的幂和 zoj 3774
    bitset在acm中的应用
    Codeforces Round #398 (Div. 2) BCD
    Hook length formula 学习笔记 UVALive 6625
  • 原文地址:https://www.cnblogs.com/xiaxiaolu/p/11280000.html
Copyright © 2011-2022 走看看