1. 前言
otp_util
是一个package,用于生成和验证一次性密码,用于在App应用程序和其他需要登录的系统中实现2FA和MFA身份验证方法。
该插件基于RFC6238(TOTP:基于时间的一次性密码算法)和 RFC4226(HOTP:基于HMAC的一次性密码算法)。
2.功能
-
创建并验证TOTP对象
-
创建并验证HOTP对象
-
使用b32编码的字符串生成一个otpauth url
-
支持使用SHA1、SHA256、SHA384和SHA512加密的OTP令牌
3.安装
dependencies:
otp_util: ^1.0.2
点击pub.dev查看。
4.示例
基于时间的OTP
import 'package:dart_otp/dart_otp.dart';
void main() {
/// default initialization for intervals of 30 seconds and 6 digit tokens
TOTP totp = TOTP(secret: "BASE32ENCODEDSECRET");
/// initialization for custom interval and digit values
TOTP totp = TOTP(secret: "BASE32ENCODEDSECRET", interval: 60, digits: 8);
totp.now(); /// => 745872
/// verify for the current time
totp.verify(otp: '745872'); /// => true
/// verify after 30s
totp.verify(otp: '745872'); /// => false
}
基于计数器的OTP
import 'package:dart_otp/dart_otp.dart';
void main() {
/// default initialization for intervals of 30 seconds and 6 digit tokens
HOTP hotp = HOTP(secret: "BASE32ENCODEDSECRET");
/// initialization for custom counter and digit value
HOTP hotp = HOTP(secret: "BASE32ENCODEDSECRET", counter: 50, digits: 8);
hotp.at(counter: 0); /// => 145089
hotp.at(counter: 1); /// => 899133
hotp.at(counter: 2438); /// => 146071
/// verify with a counter
hotp.verify(otp: '397732', counter: 2438); /// => true
hotp.verify(otp: '397732', counter: 2438); /// => false
}
5.Demo
git地址:otp_util