pedrosancao/php-otp

根据RFC 4226和RFC 6238实现的基于HMAC的一次性密码算法,兼容Google Authenticator

v1.1.0 2020-11-23 00:41 UTC

This package is auto-updated.

Last update: 2024-09-23 08:58:56 UTC


README

project license code size PHP version packagist version packagist downloads test coverage tests status

这个小型库实现了基于HMAC的一次性密码算法,主要用于两步验证:基于时间的TOTP(RFC 6238)和HOTP(RFC 4226)。

易于快速配置和使用类似Google Authenticator的移动应用。

要求

尽管它可能在PHP 5.4上也能工作,但我们强烈建议使用PHP >= 7.3,因为较低版本已经达到生命周期的结束

安装

推荐使用composer

composer require pedrosancao/php-otp

用法

同步基于时间的单次密码与客户端

创建新令牌

$totp = PedroSancao\OTP\TOTP::create();

将URI呈现给用户作为QR码或显示32进制编码的秘密

// example using Google API, it's recommended to use a local library
$uri = $totp->getUri('user@domain.com', 'Issuer Name');
$src = 'https://chart.googleapis.com/chart?chs=200x200&chld=M|0&cht=qr&chl=' . urlencode($uri);
printf('<img src="%s"/>', $src);
// OR
echo $totp->getSecretReadable();

存储共享秘密

$secret = $totp->getRawSecret();

验证密码

$totp = PedroSancao\OTP\TOTP::createRaw($storedSecret);
$totp->verify($inputPassword);

作为客户端使用

$totp = PedroSancao\OTP\TOTP::create($base32encodedSecret);
// or
$totp = PedroSancao\OTP\TOTP::createRaw($storedSecret);
// or
$totp = PedroSancao\OTP\TOTP::createFromURI($uriFromQrCode);
echo $totp->getPassword();

更改哈希算法

SHA1是默认方法。如果您想在创建新实例后使用其他算法,请使用create*方法之一调用useSha256useSha512

$totp = PedroSancao\OTP\TOTP::createRaw($storedSecret)->useSha256();

待办事项

许可证

这个库是在MIT许可证下发布的。