nacosvel / 2fa
Community-driven PHP library for generating OTPs (HOTP/TOTP), RFC-compliant and compatible with Google Authenticator.
Requires
- php: ^8.0
Requires (Dev)
- phpunit/phpunit: ^10.5
This package is auto-updated.
Last update: 2025-08-27 03:11:23 UTC
README
Nacosvel Authenticator
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
Installation
You can install the package via Composer:
composer require nacosvel/2fa
Usage
Generate Secret
use Nacosvel\Authenticator\Authentication; $secret = Authentication::generateSecret(20, false); // string(32) "RIPPSUOU3EQBR3FXML2QL43SRYGWCKY3"
Generate Token
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"
Validate Token
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)
Generate URI
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"
URI::fromString
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 ]);
URI::buildURI
use Nacosvel\Authenticator\URI; $hotpURI = URI::buildURI('hotp', 'Mr.Alex', 'Github')->secret($secret)->toString(); $totpURI = URI::buildURI('totp', '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"
Contributing
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
Contributors
Thanks goes to these wonderful people:
Contributions of any kind are welcome!
License
Distributed under the MIT License (MIT). Please see License File for more information.