一个用于多因素认证(MFA)的 PHP 库。

v1.1.0 2023-12-19 14:56 UTC

This package is not auto-updated.

Last update: 2024-09-19 17:18:49 UTC


README

一个用于多因素认证(MFA)的 PHP 库。MFA 也称为 2FA 或双因素认证。

什么是 TOTP

OTP 算法遵循在 RFC 6238 中记录的开放标准。输入包括共享密钥和系统时间。

什么是 HOTP

HOTP 代表基于 HMAC 的一次性密码,是 TOTP 基于的原生标准。两种方法都使用密钥作为输入之一,但 TOTP 使用系统时间作为另一个输入,而 HOTP 使用计数器,该计数器每次验证时递增。在 HOTP 中,双方都递增计数器并使用该计数器计算一次性密码。HOTP 标准在 RFC 4226 中记录。

安装

可以使用 Composer 安装此库。要安装,请使用以下命令

composer require nishadil/uuid

如何使用

生成密钥代码

要为用户创建新的密钥代码,请调用公共静态方法 Mfa::createSecretCode();

<?php

use Nishadil\Mfa\Mfa;

echo Mfa::createSecretCode();

?>

输出

F6ZHAZMKSLY7ISFO

生成长密钥代码

默认情况下,我们定义密钥代码长度为 16 个字符。如果需要生成长代码,可以更改它。接受的值应为整数,且在 16 到 128 之间。

例如:现在我们想要生成一个 32 个字符的长密钥代码。 Mfa::setSecretCodeLength(32)->createSecretCode();

<?php

use Nishadil\Mfa\Mfa;

echo Mfa::setSecretCodeLength(32)->createSecretCode();

?>

输出

3TYBUTVEXBOBXYTJ6L7NZ4HC7QJWAKMY

从密钥代码获取 TOTP

OTP 代表基于时间的一次性密码,是常见的一种多因素认证(MFA)。要根据您的密钥和时间生成您的 TOTP,可以调用公共静态方法 Mfa::getTOTP( string $secretCode );

<?php

use Nishadil\Mfa\Mfa;

$secretCode = "3TYBUTVEXBOBXYTJ6L7NZ4HC7QJWAKMY";
echo Mfa::getTOTP($secretCode);

?>

输出

557480

验证 TOTP

要根据您的密钥和时间验证您的 TOTP,可以调用公共静态方法 Mfa::validateTOTP(string $secretCode, string $userProvided_otp);

<?php

use Nishadil\Mfa\Mfa;

$secretCode = "3TYBUTVEXBOBXYTJ6L7NZ4HC7QJWAKMY";
$userProvided_otp = "440791";

echo Mfa::validateTOTP($secretCode, $userProvided_otp);

?>

输出

true

从密钥代码获取 HOTP

HOTP 代表基于 HMAC 的一次性密码,是 TOTP 基于的原生标准。要根据您的密钥和计数器值生成您的 HOTP,可以调用公共静态方法 Mfa::getHOTP( string $secretCode, int $counter );

<?php

use Nishadil\Mfa\Mfa;

$secretCode = "3TYBUTVEXBOBXYTJ6L7NZ4HC7QJWAKMY";
$counter = 100;
echo Mfa::getHOTP($secretCode,$counter);

?>

输出

440791

验证 HOTP

要根据您的密钥和计数器值验证您的 HOTP,可以调用公共静态方法 Mfa::validateHOTP(string $secretCode, string $userProvided_otp, int $counter);

<?php

use Nishadil\Mfa\Mfa;

$secretCode = "3TYBUTVEXBOBXYTJ6L7NZ4HC7QJWAKMY";
$counter = 100;
$userProvided_otp = "440791";

echo Mfa::validateHOTP($secretCode, $userProvided_otp, $counter);

?>

输出

true

许可证

此库的使用受 MIT 许可证(MIT)许可。