🔒 轻量级JavaScript库,实现HOTP(RFC 4226)和TOTP(RFC 6238)一次性密码算法,提供双因素认证(2FA)解决方案,兼容Google Authenticator等主流验证器。
安全提示
- 🚨 密钥存储:禁止硬编码密钥,推荐使用环境变量或密钥管理服务
- ⚠️ 算法选择:SHA-1存在安全风险,高安全场景请使用SHA-256/SHA-512/SM3
npm install @yutons/notp
# 或者
yarn add @yutons/notp
# 或者
pnpm add @yutons/notp
<!--浏览器安装-->
<script src="./dist/notp.min.js"></script>
import notp from '@yutons/notp';
// 生成Base32密钥(实际使用应动态生成)
const secret = 'JBSWY3DPEHPK3PXP';
// 生成当前时间的一次性密码
const code = new notp.TOTP(secret).generate();
console.log(`您的验证码:${code}`);
<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>
Base32编码、解码和生成随机密钥的工具类。
生成指定长度的Base32随机密钥
length (number): 密钥长度(字节),默认为20字节对字节数组进行Base32编码
bytes (Uint8Array): 需要编码的字节数组对Base32编码的字符串进行解码
HOTP (HMAC-based One-Time Password) 算法实现,遵循 RFC 4226 标准。
new HOTP(secret: string, counter?: number, digits?: number, algorithm?: Algorithm)
生成指定计数器值的一次性密码
验证提供的OTP是否与指定计数器值生成的OTP匹配
otp (string): 要验证的OTP生成下一个计数器值的一次性密码,并递增计数器
获取当前配置信息
TOTP (Time-based One-Time Password) 算法实现,基于 HOTP,使用时间戳作为计数器,遵循 RFC 6238 标准。
new TOTP(secret: string, period?: number, digits?: number, algorithm?: Algorithm)
生成当前时间窗口的一次性密码
验证提供的OTP是否有效
otp (string): 要验证的OTPwindow (number): 允许的时间窗口偏差(向前和向后),默认为1获取当前时间窗口的剩余有效时间
获取当前时间窗口的开始时间
获取当前配置信息
支持的哈希算法类型:
默认配置值:
NOTP支持多种哈希算法,以满足不同的安全需求和兼容性要求。
| 算法 | 安全性 | Google Authenticator | Microsoft Authenticator | Authy | 推荐场景 |
|---|---|---|---|---|---|
| SHA-1 | ⚠️ 一般 | ✅ 完全兼容 | ✅ 完全兼容 | ✅ 完全兼容 | 兼容性要求高的场景 |
| SHA-256 | 🔒 高 | ❌ 不兼容 | ❌ 不兼容 | ❌ 不兼容 | 安全性要求高的场景 |
| SHA-512 | 🔒 高 | ❌ 不兼容 | ❌ 不兼容 | ❌ 不兼容 | 安全性要求高的场景 |
| 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
允许商业使用、修改和私有部署,需保留版权声明。