一个根据RFC 4226(HOTP算法)和RFC 6238(TOTP算法)生成一次性密码的PHP库,与Google身份验证器兼容


README

请帮助我喝杯啤酒!🍻

Beerpay Beerpay

Scrutinizer Code Quality Coverage Status

Build Status PHP 7 ready

SensioLabsInsight

Latest Stable Version Total Downloads Latest Unstable Version License

一个根据RFC 4226(HOTP算法)和RFC 6238(TOTP算法)生成一次性密码的PHP库

此库与适用于Android和iPhone的Google身份验证器应用程序兼容。例如,它还与FreeOTP等其他应用程序兼容。

发布过程

发布过程在此描述

先决条件

此库至少需要PHP 7.1。它已成功使用PHP 7.1和夜间分支进行测试。

对于旧PHP版本的支持,请使用此库的8.3.x版本。

安装

安装此库的首选方式是依赖Composer

composer require spomky-labs/otphp

默认情况下,文档和测试环境将被排除。如果您想测试库或获取文档,请添加--prefer-source选项

composer require spomky-labs/otphp --prefer-source

TOTP或HOTP?

此库支持TOTPHOTP

TOTP是一个基于时间的一次性密码。它只存在几秒钟(周期)。您只需确保服务器和设备的时钟同步即可。这是最常见的OTP

HOTP是一个基于计数的一次性密码。每次使用密码时,计数器都会更新。您必须验证服务器和设备是否同步。

如何使用

要创建OTP对象,只需使用静态的create方法。您的对象将能够生成密码

<?php
use OTPHP\TOTP;

$otp = TOTP::create();
echo 'The current OTP is: '.$otp->now();

在上面的示例中,我们使用的是TOTP类,但您也可以以相同的方式使用HOTP

然后,您必须配置应用程序。您可以使用配置文件URI($otp->getProvisioningUri();)作为QR码输入,轻松配置所有应用程序。

我们建议您使用自己的QR码生成器(例如BaconQrCode)。如果您没有自己的生成器,类提供了方便的方式来获取Google Chart API的URI,该API将为您生成它。

$googleChartUri = $totp->getQrCodeUri();
echo "<img src='{$googleChartUri}'>";

现在,您的应用程序已配置,您可以验证生成的OTP

$otp->verify($input); // Returns true if the input is verified, otherwise false.

高级功能

升级

Base 32编码器

请注意,从版本 8.3.29.0.2 开始,内部Base32编码器已更改。

之前

use Base32\Base32;

$encoded = Base32::encode('foo');

之后

use ParagonIE\ConstantTime\Base32;

$encoded = Base32::encode('foo');

贡献

欢迎提出新功能请求、错误修复以及所有其他使本项目更有用的想法。

请将所有问题报告到仓库的bug追踪器。

同时,请确保遵循以下最佳实践:点击这里

安全问题

如果您在项目中发现安全漏洞,请勿使用bug追踪器,也勿公开发布。相反,请通过https://gitter.im/Spomky/与我联系。

许可证

本软件发布在MIT许可证下。