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.rhkb.cn/news/342331.html

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

相关文章

区块链游戏(链游)安全防御:抵御攻击的策略与实践

一、引言 区块链游戏&#xff0c;或称为链游&#xff0c;近年来随着区块链技术的普及而迅速崛起。然而&#xff0c;如同其他任何在线平台一样&#xff0c;链游也面临着各种安全威胁。本文将探讨链游可能遭遇的攻击类型以及如何通过有效的策略和技术手段进行防御。 二、链游可…

怎么用PHP语言实现远程控制两路照明开关

怎么用PHP语言实现远程控制两路开关呢&#xff1f; 本文描述了使用PHP语言调用HTTP接口&#xff0c;实现控制两路开关&#xff0c;两路开关可控制两路照明、排风扇等电器。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应的规格 序号设备名称厂商1智能WiFi墙…

LeetCode 热题 100 第56.合并区间

思路&#xff1a; class Solution {public int[][] merge(int[][] intervals) {if(intervals.length < 1) return intervals;List<int[]> res new ArrayList<>();Arrays.sort(intervals, (o1,o2) -> o1[0] - o2[0]);for(int[] interval : intervals){if(res…

科技赋能,无障碍出行的新纪元

在现代社会&#xff0c;公共设施的建设不仅是衡量城市文明程度的标尺&#xff0c;更是实现社会公平与包容的重要载体。对于盲人群体而言&#xff0c;一个完善的公共设施网络&#xff0c;意味着他们能够更加独立、自信地融入社会&#xff0c;享受与视力健全者同等的公共服务与便…

二叉树的顺序结构(堆的实现)

前言 普通的二叉树是不适合用数组来存储的&#xff0c;因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结 构存储。 现实中我们通常把堆 ( 一种二叉树 ) 使用顺序结构的数组来存储&#xff0c;需要注意的是这里的堆和操作系统 虚拟进程地址空间中的堆是两回事&…

基于物理的分析模型,用于具有场板结构的GaN HEMT的输入、输出及反向电容

Physics-Based Analytical Model for Input, Output, and Reverse Capacitance of a GaN HEMT With the Field-Plate Structure&#xff08;TPE 17年&#xff09; 摘要 该论文提出了一种分析模型&#xff0c;用于描述带有场板结构的常开型AlGaN/GaN高电子迁移率晶体管&#x…

视频汇聚EasyCVR视频监控云平台对接GA/T 1400视图库对象和对象集合XMLSchema描述

GA/T 1400协议主要应用于公安系统的视频图像信息应用系统&#xff0c;如警务综合平台、治安防控系统、交通管理系统等。在城市的治安监控、交通管理、案件侦查等方面&#xff0c;GA/T 1400协议都发挥着重要作用。 以视频汇聚EasyCVR视频监控资源管理平台为例&#xff0c;该平台…

LINUX----进程替换,exec族函数

execl族函数的作用 exel族函数用于调用一个已经存在的可执行程序,将该程序的运行需要的代码区和数据区的数据覆盖原进程,这样就可以实现在一个进程中调度另一个进程. 简单实现一个小功能来看一看 mytest.c #include <stdio.h> #include <unistd.h>int main(){print…

海思Hi3519DV500方案1200万无人机吊舱套板

海思Hi3519DV500方案1200万无人机吊舱套板 Hi3519DV500 是一颗面向行业市场推出的超高清智能网络摄像头SoC。该芯片最高 支持四路sensor 输入&#xff0c;支持最高4K30fps 的ISP 图像处理能力&#xff0c;支持2F WDR、 多级降噪、六轴防抖、全景拼接、多光谱融合等多种传统图像…

【ssh命令】ssh登录远程服务器

命令格式&#xff1a;ssh 用户名主机IP # 使用非默认端口: -p 端口号 ssh changxianrui192.168.100.100 -p 1022 # 使用默认端口 22 ssh changxianrui192.168.100.100 然后输入密码&#xff0c;就可以登录进去了。

NSSCTF-Web题目5

目录 [SWPUCTF 2021 新生赛]error 1、题目 2、知识点 3、思路 [LitCTF 2023]作业管理系统 1、题目 2、知识点 3、思路 [HUBUCTF 2022 新生赛]checkin 1、题目 2、知识点 3、思路 [SWPUCTF 2021 新生赛]error 1、题目 2、知识点 数据库注入、报错注入 3、思路 首先…

【Python数据预处理系列】掌握数据清洗技巧:如何高效使用drop()函数去除不需要的列

目录 一、准备数据 二、使用drop函数去除掉指定列 在数据分析和预处理的过程中&#xff0c;经常会遇到需要从数据集中移除某些列的情况。本文将引导您了解如何使用drop函数高效地去除不需要的列&#xff0c;帮助您提升数据处理技能&#xff0c;确保您的数据集只包含对分析有价…

Systemd服务配置排坑-TasksMax参数

一、背景 由于产品是Java程序&#xff0c;之前都是通过封装的start.sh运行即可。但是出于架构调整&#xff0c;改换为Ansible进行自动化部署&#xff0c;同时改用Systemd service的方式来对程序进行管理。 但不知道为啥原因&#xff0c;使用systemctl启动这个程序&#xff0c;就…

The First项目报告:AI+元宇宙+链游,Ultiverse能否引发新一轮GameFi浪潮?

2 月 19 日&#xff0c;由AI 驱动的 Web3 游戏制作和发布一站式平台 Ultiverse 宣布上线 Ulti-Pilot&#xff0c;Ulti-Pilot 允许用户以零成本的方式获得积分、SOUL、和 Ultiverse 生态的其他游戏内资产。 链游赛道一直是Web3领域热议的话题&#xff0c;其数字资产天然契合加密…

七月份大理站、ACM独立出版、高录用稳检索,2024年云计算与大数据国际学术会议(ICCBD 2024)

【ACM独立出版 | 高录用 | EI核心检索稳定】 2024年云计算与大数据国际学术会议&#xff08;ICCBD 2024) 2024 International Conference on Cloud Computing and Big Data (ICCBD 2024) 一、重要信息 大会官网&#xff1a;www.iccbd.net &#xff08;点击投稿/参会/了解会…

【Python】【PVE】使用PVE-API对虚拟机进行远程关机

源代码 import requests import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)address "填写PVE的域名/IP:端口" path "/api2/json/nodes/填写节点名称/qemu/填写虚拟机VMID/status/shutdown" url "https://&quo…

【探索全球精彩瞬间,尽享海外短剧魅力!海外短剧系统,您的专属观影平台】

&#x1f31f; 海外短剧系统&#xff0c;带您走进一个全新的视界&#xff0c;让您随时随地欣赏到来自世界各地的精选短剧。在这里&#xff0c;您可以感受到不同文化的碰撞&#xff0c;品味到各种题材的精髓&#xff0c;让您的生活更加丰富多彩&#xff01; &#x1f3ac; 精选…

解决Mac ~/.bash_profile 配置的环境变量重启终端后失效问题

在Mac系统中&#xff0c;配置环境变量通常是在~/.bash_profile文件中进行。然而&#xff0c;有时会遇到配置的环境变量在重启终端后失效的问题。 解决办法&#xff1a; 在~/.zshrc文件最后或最前面&#xff0c;增加一行 source ~/.bash_profile

爬虫——有道云翻译

废话不多说直接上代码 固定文本内容 import timefrom selenium import webdriver from selenium.common.exceptions import NoSuchElementException, TimeoutException from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWai…

五大PS插件推荐,让你的设计效率翻倍!

前言 PS插件可以在繁忙的设计工作中&#xff0c;帮助设计师们快速高效地完成任务&#xff0c;是每个设计师都渴望解决的问题。这些插件不仅能够提升设计效率&#xff0c;还能让设计师的创意得到更好的展现。接下来&#xff0c;就为大家推荐五款必备的PS插件&#xff0c;让你的…