imseyed/auth2fa

PHP 库提供生成基于时间的单次密码(TOTP)和基于HMAC的单次密码(HOTP)的功能,这些功能常用于双因素认证(2FA)系统。

v1.1.2 2024-08-06 09:00 UTC

This package is auto-updated.

Last update: 2024-09-06 09:14:30 UTC


README

此PHP库提供生成基于时间的单次密码(TOTP)和基于HMAC的单次密码(HOTP)的功能,这些功能常用于双因素认证(2FA)系统。

特性

  • TOTP生成:生成基于时间的单次密码。
  • HOTP生成:生成基于HMAC的单次密码。
  • 随机密钥生成:为TOTP和HOTP生成随机密钥。

使用方法

通过composer安装

composer require imseyed/auth2fa

TOTP生成

Auth2FA::TOTP 方法使用提供的密钥和可选的时间片生成一个 基于时间的单次密码totp.example.php

$totp = imseyed\Auth2FA::TOTP($secret, $timeSlice);
/*
 $totp is a OPT code like: 458905
*/

如果您想显示TOTP代码的过期时间,必须使用 Auth2FA::expire_time。该方法返回一个Unix时间戳。

$expirationTime = imseyed\Auth2FA::expire_time($timeSlice);
echo "Expire on ".date("H:i:s", $expirationTime)." (".($expirationTime - time())."s remind)";
/*
 $expirationTime is a unix timestamp like: 1722929683
*/

HOTP生成

Auth2FA::HOTP 方法使用提供的密钥和计数器值生成一个 基于HMAC的单次密码hotp.example.php

$code = imseyed\Auth2FA::HOTP($secret, $counter);
/*
 $code is string like: 111222
*/

密钥生成

Auth2FA::generateSecret 方法生成指定长度的 随机密钥

$length = 16; // Secret key lenght
$secret = \imseyed\Auth2FA::generate_secret($length);
/*
 $secret is string like: OVZ7JFIPIXE4RTCE
*/

注意:没有单独的函数来检查2fa代码的正确性。您必须使用生成函数来确认用户发送的代码的正确性。

许可

此库在MIT许可证下发布。