This community-driven PHP extension package provides secure one-time password (OTP) generation, implementing both HOTP (RFC 4226) and TOTP (RFC 6238) algorithms. Designed for reliability and interoperability, it ensures seamless compatibility with Google Authenticator and other industry-standard OTP solutions, making it ideal for implementing two-factor authentication (2FA) in PHP applications.
Table of Contents
You can install the package via Composer:
composer require nacosvel/2fause Nacosvel\Authenticator\Authentication;
$secret = Authentication::generateSecret(20, false);
// string(32) "RIPPSUOU3EQBR3FXML2QL43SRYGWCKY3"use Nacosvel\Authenticator\HOTP;
use Nacosvel\Authenticator\TOTP;
$hotpToken = HOTP::generateToken($secret, 30, 6, 'sha1');
$totpToken = TOTP::generateToken($secret, 30, 6, 'sha1');
// string(6) "577349"
// string(6) "981726"use Nacosvel\Authenticator\HOTP;
use Nacosvel\Authenticator\TOTP;
$hotpValidate = HOTP::validate($secret, $hotpToken, 30, 6, 'sha1', 3);
$totpValidate = TOTP::validate($secret, $totpToken, 30, 6, 'sha1', 3);
// bool(true)
// bool(true)use Nacosvel\Authenticator\HOTP;
use Nacosvel\Authenticator\TOTP;
$hotpURI = HOTP::buildURI($secret, 'Mr.Alex', 'Github', 30, 6, 'sha1')->toString();
$totpURI = TOTP::buildURI($secret, 'Mr.Alex', 'Github', 30, 6, 'sha1')->toString();
// string(118) "otpauth://hotp/Github:Mr.Alex?secret=LWN4DKX2KHW4X7VMSWNIRJVHW4F4SQ4Z&counter=30&digits=6&algorithm=sha1&issuer=Github"
// string(117) "otpauth://totp/Github:Mr.Alex?secret=RIPPSUOU3EQBR3FXML2QL43SRYGWCKY3&period=30&digits=6&algorithm=sha1&issuer=Github"use Nacosvel\Authenticator\URI;
$uri = URI::fromString('otpauth://totp/Github:Mr.Alex?secret=RIPPSUOU3EQBR3FXML2QL43SRYGWCKY3&period=30&digits=6&algorithm=sha1&issuer=Github');
var_dump([
'type' => $uri->getType(), // totp
'issuer' => $uri->getIssuer(), // Github
'account' => $uri->getAccount(), // Mr.Alex
'secret' => $uri->getSecret(), // RIPPSUOU3EQBR3FXML2QL43SRYGWCKY3
'digits' => $uri->getDigits(), // 6
'algorithm' => $uri->getAlgorithm(),// sha1
]);use Nacosvel\Authenticator\URI;
use Nacosvel\Authenticator\HOTP;
use Nacosvel\Authenticator\TOTP;
$hotpURI = URI::buildURI(HOTP::class, 'Mr.Alex', 'Github')->secret($secret)->toString();
$totpURI = URI::buildURI(TOTP::class, 'Mr.Alex', 'Github')->secret($secret)->toString();
// string(83) "otpauth://hotp/Github:Mr.Alex?secret=LWN4DKX2KHW4X7VMSWNIRJVHW4F4SQ4Z&issuer=Github"
// string(83) "otpauth://totp/Github:Mr.Alex?secret=RIPPSUOU3EQBR3FXML2QL43SRYGWCKY3&issuer=Github"Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Thanks goes to these wonderful people:
Contributions of any kind are welcome!
Distributed under the MIT License (MIT). Please see License File for more information.