用易语言实现谷歌2FA身份验证器— 打造属于你自己的2FA工具
前言
在网络安全日益重要的今天,仅仅靠“用户名+密码”这层保护已经显得有点力不从心了。无论是为了登录服务器、加密货币交易所,还是保护个人的社交媒体账号,双因素认证(2FA) 已经成为了我们数字资产的“守门人”。
谷歌身份验证器(Google Authenticator)是目前最主流的2FA工具之一。虽然市面上有很多现成的App,但作为一名技术爱好者,总会有一些顾虑:别人家的软件安全吗?会不会上传我的密钥?如果手机丢了怎么办?
于是,我花了点时间,使用易语言,手写了一个纯粹的、本地的谷歌2FA验证码生成工具。
今天,我将它核心的实现原理和源码分享给大家,并发布在我的博客上,供大家下载体验。
下载地址:https://www.ikdya.com/2026/04/04/639.html
软件效果:

核心原理浅析:TOTP是什么?
在做这个工具之前,我们首先要弄明白谷歌身份验证器是怎么工作的。
简单来说,它基于 TOTP(基于时间的一次性密码) 算法。这个算法有一个公式:OTP = HmacSHA1( SecretKey, CurrentTime )
拆解开来,只需要三步:
-
共享密钥(SecretKey):我们在开启双重验证时,网站给的那串乱码字符串。这是核心中的核心。
-
动态计算:程序使用 HMAC-SHA1 算法,将密钥和当前时间(精确到30秒)进行哈希运算。
-
截取数字:从计算出的哈希结果中,截取一段,转换成6位或8位的数字。
-
显示:这就是你看到的那个每30秒刷新一次的动态验证码。
实战开发:代码结构与实现
我将这个工具的核心逻辑封装在了一个模块里。因为网上流传的一些源码比较老旧或者不全,我这次重写了生成部分,并加入了密钥管理功能。
核心代码实现逻辑如下(思路解析):
-
Base32解码:网站提供的密钥通常是Base32编码的(因为只有大写字母和数字,方便输入),我们需要先把它解码成原始字节集。
-
.版本 2 len = 取字节集长度 (数据) .如果真 (len ≤ 0) 返回 ({ }) .如果真结束 .计次循环首 (len, i) a = 寻找字节集 ({ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 50, 51, 52, 53, 54, 55 }, 到字节集 (数据 [i]), ) - 1 .如果真 (a = -2) 返回 ({ }) .如果真结束 b = { } .判断循环首 (a ≠ 0) b = 选择 (a % 2 = 0, { 48 }, { 49 }) + b a = a \ 2 .判断循环尾 () 二进制 = 二进制 + 取字节集右边 ({ 48, 48, 48, 48, 48 } + b, 5) .计次循环尾 () len = len × 5 len = len - len % 8 len = len ÷ 8 返回 = 取空白字节集 (len) .计次循环首 (len, i) a = 0 .计次循环首 (8, j) a = a × 2 + 二进制 [(i - 1) × 8 + j] - 48 .计次循环尾 () 返回 [i] = a .计次循环尾 () -
时间因子计算:计算当前Unix时间戳(秒数),然后除以30(有效期),取整数部分。
-
HMAC-SHA1加密:这是最关键的一步,对时间因子进行哈希运算。
-
动态截取:从加密结果中取出4个字节,经过位运算,最后得到一个int32整数。
-
取余数:用这个整数对10的6次方(即1,000,000)取余,得到6位验证码。
功能介绍
本次制作的工具有以下特点:
-
完全本地离线运行:软件不联网,彻底杜绝密钥被上传的风险,安全感拉满。
-
实时倒计时:界面直观显示验证码剩余有效秒数,让你心里有数。
-
一键复制
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)