williameggers/php-totp

PHP的TOTP/HOTP库

1.0.0 2021-10-27 10:02 UTC

This package is auto-updated.

Last update: 2024-09-27 17:00:41 UTC


README

这是一个简单的PHP库和脚本,可以生成HOTP和TOTP令牌。该库完全符合RFC 4226和RFC 6238规范。支持所有哈希算法,包括令牌长度和TOTP的开始时间。

安装

将以下内容添加到您的composer.json文件中

{
    "require": {
        "williameggers/php-totp": "^1.0"
    }
}

然后运行 composer install

使用方法

<?php

use williameggers\phptotp\{Base32,Totp};

# Generate a new secret key
# Note: generateSecret returns a string of random bytes. It must be base32 encoded before displaying to the user. You should store the unencoded string for later use.
$secret = Totp::generateSecret(16);

# Display new key to user so they can enter it in Google Authenticator or Authy
echo Base32::encode($secret);

# Generate the current TOTP key
# Note: generateToken takes a base32 decoded string of bytes.
$key = (new Totp())->generateToken($secret)

# Check if user submitted correct key
if ($user_submitted_key !== $key) {
    exit();
}

文档

williameggers\phptotp\Totp 扩展 Hotp

  • __construct(string $algo = 'sha1', int $startTime = 0, int $timeInterval = 30): Totp
    • $algo: 生成令牌时使用的算法
    • $startTime: 时间的开始
    • $timeInterval: 令牌之间的时间间隔
  • generateToken(string $key, ?int $time = null, int $length = 6): string
    • $key: 作为字节,base32解码的密钥
    • $time: 用于令牌的时间,默认为当前时间
    • $length: 令牌长度

williameggers\phptotp\Hotp

  • __construct(string $algo = 'sha1'): Hotp
    • $algo: 生成令牌时使用的算法
  • generateToken(string $key, ?int $count = 0, int $length = 6): string
    • $key: 作为字节,base32解码的密钥
    • $count: HOTP计数器
    • $length: 令牌长度
  • generateSecret(int $length = 16): string
    • $length: 字节字符串的长度
    • 返回值:此方法返回一个随机字节字符串,当显示给用户时,请使用 Base32::encode。

williameggers\phptotp\Base32

  • static encode(string $data): string
    • $data: 要base32编码的数据
  • static decode(string $data): string
    • $data: 要base32解码的数据

generate.php

generate.php 是一个脚本,其行为与Google Authenticator完全相同。它接受一个密钥,可以是参数,也可以在标准输入提示时输入,并假设使用SHA1、Unix时间戳作为开始和30秒的时间间隔来生成令牌。密钥应该是base32编码的。

$ ./generate.php
Enter secret key: turtles
Token: 338914
$

许可证

本软件根据MIT许可证发布,许可证文件可在LICENSE中找到。