notp

NOTP - One-Time Password Library

License: MIT TypeScript NPM npm GitHub stars GitHub forks

🔒 轻量级JavaScript库,实现HOTP(RFC 4226)和TOTP(RFC 6238)一次性密码算法,提供双因素认证(2FA)解决方案,兼容Google Authenticator等主流验证器。

安全提示

DEMO地址

NOTP 动态口令生成器

仓库地址


目录


核心特性


安装指南

npm install @yutons/notp
# 或者
yarn add @yutons/notp
# 或者
pnpm add @yutons/notp
<!--浏览器安装-->
<script src="./dist/notp.min.js"></script>

快速开始

1. 生成TOTP验证码(Node.js)

import notp from '@yutons/notp';
// 生成Base32密钥(实际使用应动态生成)
const secret = 'JBSWY3DPEHPK3PXP';
// 生成当前时间的一次性密码
const code = new notp.TOTP(secret).generate();
console.log(`您的验证码:${code}`);

2. 生成TOTP验证码(浏览器)


<script src="https://cdn.jsdelivr.net/npm/notp/dist/notp.umd.min.js"></script>
<script>
    // 生成Base32密钥(实际使用应动态生成)
    const secret = 'JBSWY3DPEHPK3PXP';
    // 生成当前时间的一次性密码
    const code = new notp.TOTP(secret).generate();
    console.log(`您的验证码:${code}`);
</script>

API参考

Base32 类

Base32编码、解码和生成随机密钥的工具类。

Base32.generate(length)

生成指定长度的Base32随机密钥

Base32.encode(bytes)

对字节数组进行Base32编码

Base32.decode(secret)

对Base32编码的字符串进行解码

HOTP 类

HOTP (HMAC-based One-Time Password) 算法实现,遵循 RFC 4226 标准。

构造函数

new HOTP(secret: string, counter?: number, digits?: number, algorithm?: Algorithm)

HOTP.generate(counter?)

生成指定计数器值的一次性密码

HOTP.verify(otp, counter)

验证提供的OTP是否与指定计数器值生成的OTP匹配

HOTP.next()

生成下一个计数器值的一次性密码,并递增计数器

HOTP.getConfiguration()

获取当前配置信息

属性

TOTP 类

TOTP (Time-based One-Time Password) 算法实现,基于 HOTP,使用时间戳作为计数器,遵循 RFC 6238 标准。

构造函数

new TOTP(secret: string, period?: number, digits?: number, algorithm?: Algorithm)

TOTP.generate()

生成当前时间窗口的一次性密码

TOTP.verify(otp, window)

验证提供的OTP是否有效

TOTP.timeRemaining()

获取当前时间窗口的剩余有效时间

TOTP.currentPeriodStart()

获取当前时间窗口的开始时间

TOTP.getConfiguration()

获取当前配置信息

属性

Algorithm 枚举

支持的哈希算法类型:

Default 类

默认配置值:

算法支持

NOTP支持多种哈希算法,以满足不同的安全需求和兼容性要求。

算法 安全性 Google Authenticator Microsoft Authenticator Authy 推荐场景
SHA-1 ⚠️ 一般 ✅ 完全兼容 ✅ 完全兼容 ✅ 完全兼容 兼容性要求高的场景
SHA-256 🔒 高 ❌ 不兼容 ❌ 不兼容 ❌ 不兼容 安全性要求高的场景
SHA-512 🔒 高 ❌ 不兼容 ❌ 不兼容 ❌ 不兼容 安全性要求高的场景
SM3 🔒 高 ❌ 不兼容 ❌ 不兼容 ❌ 不兼容 国密合规场景

算法选择建议

  1. SHA-1: 作为默认算法,与大多数主流验证器应用完全兼容,适合需要广泛兼容性的场景。
  2. SHA-256/SHA-512: 提供更高的安全性,但会失去与主流验证器应用的兼容性,适合内部系统或自定义验证器应用。
  3. SM3: 中国国家密码管理局发布的密码杂凑算法,符合国密标准,适用于有国密合规要求的场景。

使用示例

import {TOTP, Algorithm} from 'notp';
// 使用默认的SHA-1算法 
const totpSha1 = new TOTP('YOUR_SECRET_HERE');
// 使用SHA-256算法 
const totpSha256 = new TOTP('YOUR_SECRET_HERE', 30, 6, Algorithm.SHA256);
// 使用SM3算法 
const totpSm3 = new TOTP('YOUR_SECRET_HERE', 30, 6, Algorithm.SM3);

注意事项


许可证

MIT License ©yutons
允许商业使用、修改和私有部署,需保留版权声明。