当前位置:首页 > PHP

php实现TOTP

2026-03-12 23:44:26PHP

TOTP 简介

TOTP(Time-based One-Time Password)是一种基于时间的一次性密码算法,常用于双因素认证(2FA)。其核心是结合密钥和当前时间戳生成动态验证码,通常每30秒更新一次。

PHP 实现步骤

依赖安装 确保服务器已安装 PHP 且版本 ≥ 7.1。需通过 Composer 安装 sonata-project/google-authenticator 库:

php实现TOTP

composer require sonata-project/google-authenticator

生成密钥 使用库生成随机密钥,并转换为 Base32 格式便于用户扫描二维码:

use Sonata\GoogleAuthenticator\GoogleAuthenticator;
$g = new GoogleAuthenticator();
$secret = $g->generateSecret();

生成验证码 基于当前时间戳计算验证码(默认30秒有效):

php实现TOTP

$code = $g->getCode($secret);

验证用户输入 校验用户提供的验证码是否匹配当前或临近时间段的预期值:

$isValid = $g->checkCode($secret, $userInput);

生成二维码 URL 方便移动端扫描绑定(如 Google Authenticator):

$qrUrl = $g->getUrl('YourAppName', 'user@example.com', $secret);
// 输出为:otpauth://totp/YourAppName:user@example.com?secret=XXX&issuer=YourAppName

完整示例代码

require_once 'vendor/autoload.php';

$g = new \Sonata\GoogleAuthenticator\GoogleAuthenticator();
$secret = $g->generateSecret();
$qrUrl = $g->getUrl('MyApp', 'user123', $secret);

// 模拟用户输入
$userCode = '123456'; // 从表单获取
$isValid = $g->checkCode($secret, $userCode);

echo "Secret: $secret\n";
echo "QR URL: $qrUrl\n";
echo "Valid: " . ($isValid ? 'Yes' : 'No') . "\n";

注意事项

  • 时间同步:服务器与客户端需保持时间同步,NTP 服务推荐。
  • 密钥存储:密钥需安全存储(如数据库加密字段),不可明文传输。
  • 容错窗口:可通过 $g->setCodeLength(6) 调整验证码位数(默认6位)。

扩展优化

  • 自定义有效期:修改 GoogleAuthenticator 类的 $timeSlice 属性。
  • 多设备支持:同一密钥可在多个设备使用,但需注意同步问题。
  • 备份代码:生成一组静态备用码供紧急情况使用。

标签: phpTOTP
分享给朋友:

相关文章

php记住密码怎么实现

php记住密码怎么实现

使用Cookie实现记住密码功能 在PHP中,可以通过设置Cookie来记住用户的登录状态。以下是一个简单的实现方式: // 用户登录验证成功后 if ($login_success) {…

php实现即时通讯

php实现即时通讯

PHP 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…

php实现推送

php实现推送

PHP 实现推送功能的方法 PHP 实现推送功能可以通过多种方式完成,包括 WebSocket、Server-Sent Events (SSE)、长轮询或第三方推送服务。以下是几种常见的方法: 使用…

php实现博客

php实现博客

使用PHP实现博客系统 数据库设计 创建数据库表存储博客文章和用户信息。常见的表包括posts(文章)和users(用户)。 CREATE TABLE users ( id INT AUTO…

php实现定时

php实现定时

PHP 实现定时任务的方法 PHP 本身是脚本语言,通常需要借助外部工具或框架实现定时任务。以下是几种常见方法: 使用 Cron 任务 Linux 系统自带的 Cron 是常用的定时任务工具。通过编…

php 路由实现的

php 路由实现的

PHP 路由实现方法 基于原生 PHP 实现路由 创建一个简单的路由解析器,通过解析 URL 路径来调用对应的控制器或函数。 // 定义路由表 $routes = [ '/' => '…