TOTP实现Google Authenticator认证工具获取6位验证码

登录遇到Google认证怎么办?

在这里插入图片描述

TOTP是什么?(Google Authenticator)

TOTP(Time-based One-Time Password)是一种基于时间的一次性密码算法,主要用于双因素身份验证。其核心原理是通过共享密钥和时间同步生成动态密码,具体步骤如下:

  1. 共享密钥:服务端与客户端预先共享一个密钥(通常为Base32编码的字符串)。

  2. 时间分片:将当前时间戳(Unix时间,秒级)除以固定时间窗口(如30秒),得到一个整数时间计数器(T)。

  3. HMAC哈希:用密钥对时间计数器T进行HMAC-SHA1运算,生成20字节的哈希值。

  4. 动态截断

    • 取哈希值末4位的低4位作为偏移量offset
    • offset位置截取4字节数据,转换为31位整数S
  5. 生成OTP:对S取模运算(如S % 10^6),生成6-8位的数字密码,有效期为一个时间窗口。

特点

  • 密码每30秒(可配置)自动更新,防止重放攻击。
  • 依赖时间同步,通常允许±1个时间窗口的容差。
  • 无需联网通信,离线设备(如验证器App)亦可生成有效密码。

常见业务场景
TOTP(Time-based One-Time Password)是基于时间的一次性密码算法,广泛应用于双因素身份验证(2FA)场景中,通过结合静态密码和动态生成的临时密码来增强安全性。以下是其常见业务场景及对应参考资料的支持:

  1. 在线账户与云服务安全
    TOTP常用于保护电子邮件、社交媒体、企业SaaS平台(如Google Workspace、Microsoft 365)等在线账户,防止密码泄露后的未授权访问。例如,用户登录时需输入密码和手机端生成的TOTP验证码。

  2. 金融服务与网银操作
    银行和支付平台(如PayPal、支付宝)使用TOTP验证用户身份,尤其是在转账、修改敏感信息等高风险操作时,通过动态密码降低盗刷风险。

  3. 企业内网与VPN访问
    企业通过TOTP限制员工远程访问内部网络或VPN,确保只有持有动态验证码的授权人员可连接,防止外部攻击者利用窃取的静态密码入侵。

  4. 服务器与特权账户管理
    系统管理员登录服务器、数据库或运维平台时,需提供TOTP验证码,避免因密码泄露导致关键基础设施被入侵。

  5. 政府与公共系统安全
    政府机构的社保、税务等系统采用TOTP保护公民敏感数据,结合密码和动态码实现双重验证,提升防抵赖性和合规性。

  6. 开发工具与代码仓库
    GitHub、GitLab等平台为开发者账户启用TOTP,防止代码库被恶意篡改或窃取,尤其在开源协作场景中尤为重要。

技术优势支持场景

  • TOTP无需依赖网络通信(如短信验证码),仅需时间同步即可生成密码,适用于弱网络环境。
  • 其算法开源且易于集成,适配多数主流认证应用(如Google Authenticator、1Password)。
  • 需注意时间同步问题,否则可能导致验证失败。

TOTP广泛用于Google Authenticator、Microsoft Authenticator等双因素认证工具,平衡安全性与用户体验。

以下是代码实现,已将二维码提取为URI如代码所示

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.io.IOException;
import java.net.InetAddress;
import java.net.URI;
import java.net.URLDecoder;
import java.nio.ByteBuffer;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.codec.binary.Base32;
import org.apache.commons.net.ntp.NTPUDPClient;
import org.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星星点点洲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值