Golang:使用Base64Captcha生成数字字母验证码实现安全校验

Base64Captcha可以在服务端生成验证码,以base64的格式返回

为了能看到生成的base64验证码图片,我们借助gin

go get -u github.com/mojocn/base64Captcha
go get -u github.com/gin-gonic/gin

文档的示例看起来很复杂,下面,通过简单的一个小实例,来展示Base64Captcha的基本使用

项目示例

目录结构

main.go
captcha_util/captcha_util.go
templates/index.html

先写一个工具类,将base64Captcha进行简单的封装,实现主要的功能:生成验证码验证验证码

package captcha_utilimport ("github.com/mojocn/base64Captcha"
)// 验证码工具类
type StringCaptcha struct {captcha *base64Captcha.Captcha
}// 创建验证码
func NewCaptcha() *StringCaptcha {// storestore := base64Captcha.DefaultMemStore// 包含数字和字母的字符集source := "123456789abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"// driverdriver := base64Captcha.NewDriverString(80,     // height int240,    // width int6,      // noiseCount int1,      // showLineOptions int4,      // length intsource, // source stringnil,    // bgColor *color.RGBAnil,    // fontsStorage FontsStoragenil,    // fonts []string)captcha := base64Captcha.NewCaptcha(driver, store)return &StringCaptcha{captcha: captcha,}
}// 生成验证码
func (stringCaptcha *StringCaptcha) Generate() (string, string, string) {id, b64s, answer, _ := stringCaptcha.captcha.Generate()return id, b64s, answer
}// 验证验证码
func (stringCaptcha *StringCaptcha) Verify(id string, answer string) bool {return stringCaptcha.captcha.Verify(id, answer, true)
}

通过gin的两个路由,分别输出验证码验证验证码

package mainimport ("demo/captcha_util""fmt""html/template""net/http""github.com/gin-gonic/gin"
)func main() {app := gin.Default()// 加载模板文件app.LoadHTMLGlob("templates/*")// 验证码stringCaptcha := captcha_util.NewCaptcha()// 生成验证码app.GET("/generate", func(ctx *gin.Context) {id, b64s, answer := stringCaptcha.Generate()fmt.Println(answer)ctx.HTML(http.StatusOK, "index.html", gin.H{"captchaId": id,"b64s":      template.URL(b64s),"answer":    answer,})})// 验证app.POST("/verify", func(ctx *gin.Context) {answer := ctx.PostForm("answer")captchaId := ctx.PostForm("captchaId")result := stringCaptcha.Verify(captchaId, answer)ctx.JSON(http.StatusOK, gin.H{"captchaId": captchaId,"answer":    answer,"result":    result,})})// 监听并在 http://127.0.0.1:8080 上启动服务app.Run()
}

index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Demo</title>
</head>
<body><img src="{{.b64s}}"><form action="/verify" method="post"><input type="text" name="captchaId" value="{{.captchaId}}" hidden><input type="text" name="answer" value=""><input type="submit" value="Submit"></form>
</body>
</html>

生成验证码页面,为了便于显示,直接用模板渲染的方式处理,也可已改为返回接口数据

http://localhost:8080/generate
在这里插入图片描述

提交验证码后返回验证结果

http://localhost:8080/verify
在这里插入图片描述

参考文章

  • https://gin-gonic.com/zh-cn/docs/
  • go使用template出现#ZgotmplZ
  • https://pkg.go.dev/github.com/mojocn/base64Captcha

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/19818.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中学生学人工智能系列:如何用AI学化学

经常有读者朋友给公众号《人工智能怎么学》留言咨询如何使用人工智能学习语文、数学、英语、化学等科目。这些都是中学教师、中学生朋友及其家长们普遍关注的问题。仅仅使用留言回复的方式&#xff0c;不可能对这些问题做出具体和透彻的解答&#xff0c;因此本公众号近期将推出…

3D视觉系统实现自动化上下料操作

在竞争激烈的汽车制造行业&#xff0c;提高生产效率、降低成本并保证产品质量是企业持续发展的关键。特别是在汽车制造过程中&#xff0c;各种零部件的上下料操作占据了大量的生产时间&#xff0c;因此如何实现这些操作的自动化、高效化成为了一个亟待解决的问题。 富唯智能3D视…

C++学习/复习9--string的使用/迭代器/查找遍历修改转换容量等函数与重载运算符(建议记常用的)/练习

一、string类概要 1.1string类对象常见构造 1.2string中的元素访问 范围for与迭代器 容器与迭代器 算法与迭代器 反向迭代器 const迭代器 1.3string中的插入与查找 1.4string中的的容量与大小 注意1&#xff1a;不同编译器的对某些函数底层实现在遵守STL标准的情况下具体方式…

用任务监听RTOS各任务的运行状态

使用rtos时内存对于单片机来说总是非常抠搜的。 任务分配多了浪费&#xff0c;少了跑不动。 最近看到这个监听任务还是很好用的。 废话不多说。开始操作 第一步在配置文件中打开这几个宏 #define configUSE_TRACE_FACILITY 1 /*为1时启用可视化跟踪调试*/ #define conf…

两整数之和 ---- 位运算

题目链接 题目: 分析: 题目中要求不能使用-, 考虑到我们的位运算异或^, 是无进位加法, 可以使用如果是无进位加法, 那么我们就要找到进位, 并进行计算, 进位只有1和1相加时才会产生进位1, 而0和1相加无进位, 进位为0, 那么我们就想到了&运算, 1&1 1, 0&1 0, 所…

07-操作元素(键盘和鼠标事件)

在前面的文章中重点介绍了一些元素的定位方法&#xff0c;定位到元素后&#xff0c;就需要操作元素了。本篇总结了web页面常用的一些操作元素方法&#xff0c;可以统称为行为事件。 一、简单操作 点击按钮&#xff08;鼠标左键&#xff09;&#xff1a;click()清空输入框&…

基础—SQL—DQL(数据查询语言)排序查询

一、引言 排序查询这里面涉及的关键字&#xff1a;ORDER BY。在我们日常的开发中&#xff0c;这个是很常见的&#xff0c;比如打开一个网购的商城&#xff0c;这里面可以找到一个销量的排序、综合的排序、价格的排序&#xff08;升序、降序&#xff09;等等。接下来就学习这一部…

mac电脑用谷歌浏览器对安卓手机H5页面进行inspect

1、mac上在谷歌浏览器上输入 chrome://inspect 并打开该页面。 2、连接安卓手机到Mac电脑&#xff1a;使用USB数据线将安卓手机连接到Mac电脑。 3、手机上打开要的h5页面 Webview下面选择要的页面&#xff0c;点击inspect&#xff0c;就能像谷歌浏览器页面打开下面的页面&#…

​​​​​​​Beyond Compare 3密钥被撤销的解决办法

首先&#xff0c;BCompare3的链接如下 链接&#xff1a;https://pan.baidu.com/s/1vuSxY0cVQCt0-8CpFzUhvg 提取码&#xff1a;8888 --来自百度网盘超级会员V7的分享 1.问题现象 激活之后在使用过程中有时候会出现密钥被撤销的警告&#xff0c;而且该工具无法使用&#xff…

命令模式(行为型)

目录 一、前言 二、命令模式 三、总结 一、前言 命令模式&#xff08;Command Pattern&#xff09;是一种行为型设计模式&#xff0c;命令模式将一个请求封装为一个对象&#xff0c;从而可以用不同的请求对客户进行参数化&#xff1b;对请求排队或记录请求日志&#xff0c;以…

小角楼是怎样成为清廷御酒的?

执笔 | 扬 灵 编辑 | 古利特 “酒史千年远&#xff0c;酒花百代香&#xff0c;天府多佳酿&#xff0c;美酒驻平昌。” 对四川省巴中市平昌县而言&#xff0c;白酒是经济发展的重要产业之一&#xff0c;好山好水出好酒&#xff0c;优良的地质、水源、气候、土壤等条件以及悠久…

算法(十一)贪婪算法

文章目录 算法简介算法概念算法举例 经典问题 -背包问题 算法简介 算法概念 贪婪算法&#xff08;Greedy&#xff09;是一种在每一步都采取当前状态下最好的或者最优的选择&#xff0c;从而希望导致结果也是全局最好或者最优的算法。贪婪算法是当下局部的最优判断&#xff0c…

无忧易售ERP:解锁TikTok平台订单处理新效能,赋能跨境电商新未来

在这个全球化电商飞速发展的时代&#xff0c;TikTok作为新兴的电商蓝海&#xff0c;正吸引着无数商家的目光。然而&#xff0c;如何在竞争激烈的市场中脱颖而出&#xff0c;高效管理订单&#xff0c;提升顾客体验&#xff0c;成为每个商家必须面对的课题。无忧易售ERP&#xff…

NSS题目练习5

[NISACTF 2022]babyupload 打开后尝试上传php&#xff0c;jpg&#xff0c;png文件都没成功 查看源代码发现有个/source文件 访问后下载压缩包发现有一个python文件 搜索后知道大致意思是&#xff0c;上传的文件不能有后缀名&#xff0c;上传后生成一个uuid&#xff0c;并将uuid…

基于深度学习的模糊认知图方法

1 文章信息 文章题目为“Deep Fuzzy Cognitive Maps for Interpretable Multivariate Time Series Prediction”&#xff0c;该文于2019年发表于“IEEE TRANSACTIONS ON FUZZY SYSTEMS”。文章提出了深度模糊认知图&#xff08;FCM&#xff09;用于多变量时间序列预测&#xff…

19.Redis之集群

1.集群的基本介绍 集群 这个词.广义的集群,只要你是多个机器,构成了分布式系统, 都可以称为是一个"集群"前面主从结构,哨兵模式,也可以称为是"广义的集群”狭义的集群,redis 提供的集群模式, 这个集群模式之下,主要是要解决,存储空间不足的问题(拓展存储空间) …

科普健康短视频:成都鼎茂宏升文化传媒公司

科普健康短视频&#xff1a;引领健康知识新潮流 在数字化时代的浪潮中&#xff0c;短视频以其短小精悍、直观易懂的特点&#xff0c;迅速成为大众获取信息的重要渠道。其中&#xff0c;科普健康短视频更是凭借其科学、权威、实用的内容&#xff0c;吸引了大量关注健康的观众。…

Linux —— MySQL操作(1)

一、用户与权限管理 1.1 创建与赋予权限 create user peter% identified by 123465 # 创建用户 peter&#xff0c;# %&#xff1a;允许所有用户登录这个用户访问数据库 刚创建的新用户是什么权限都没有&#xff0c;需要赋予权限 grant select on mysql.* to peter%; # 赋予…

什么是数据资产管理?数据资产管理包括了哪些内容?

数据资产管理包括数据模型管理、数据标准管理、数据质量管理等 10 个活动职能&#xff0c;覆盖数据资源化、数据资产化两个阶段。本章参考 PDCA 方法&#xff0c;从计划、执行、检查、改进四个环节着手&#xff0c;阐述数据资产管理活动职能的核心理念与实践要点。 一、数据模型…

使用Python操作Git

大家好&#xff0c;当谈及版本控制系统时&#xff0c;Git是最为广泛使用的一种&#xff0c;而Python作为一门多用途的编程语言&#xff0c;在处理Git仓库时也展现了其强大的能力。通过Python&#xff0c;我们可以轻松地与Git仓库进行交互&#xff0c;执行各种操作&#xff0c;从…