搜索分类、插件与代码仓

插件详情v3.2.1

otp

RFC6238 基于时间的一次性密码 / Google Authenticator 库

AndroidiOSWebmacOSWindowsLinux
近 30 天下载
8.7万
喜欢数
204
Pub 分数
160

安装插件

flutter pub add otp

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

一个 Dart 库,实现了 RFC 6238 时间型一次性密码(TOTP)算法,与 Google Authenticator 及其他 TOTP 兼容应用兼容。它可生成安全、限时的认证码,用于双因素认证(2FA)。该包支持在 Android、iOS、Web、macOS、Windows 和 Linux 等多个平台上生成和验证 OTP。非常适合在 Flutter 应用中以最少配置集成 2FA。

适合场景

  • 移动应用中的双因素认证
  • 带2FA的安全登录系统
  • 与 Google Authenticator 集成
  • 生成限时访问代码
  • 用户账户验证
  • 备份代码生成

主要特点

  • 符合 RFC 6238 的 TOTP 实现
  • 跨平台支持
  • 简单的OTP生成和验证
  • 支持自定义时间步长和数字
  • 与验证器应用兼容
  • 轻量且无依赖

适合对象

  • 需要2FA的应用
  • 身份验证服务
  • 注重安全的应用程序
  • 开发安全登录流程的开发者
  • 与现有 TOTP 系统集成

使用建议

  • 需要正确的时间同步
  • 不支持二维码生成
  • 无内置用户界面
  • 手动处理密钥存储
  • 不适用于长期令牌存储

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

MAJOR BEHAVIOR CHANGE IN 3.1.0: Explanation of Changes from 3.0 to 3.1

Dart

dart-otp

RFC4226/RFC6238 One-Time Password / Google Authenticator Library

Features:

Getting Started

Pubspec

pub.dartlang.org: (you can use 'any' instead of a version if you just want the latest always)

dependencies:
  otp: 3.2.0
import 'package:otp/otp.dart';

Start generating tokens.

// Generate TOTP code. (String versin of function incase of leading 0)
OTP.generateTOTPCodeString("JBSWY3DPEHPK3PXP", 1362302550000); // -> '505548'

// Generate HOTP Code.
OTP.generateHOTPCodeString("JBSWY3DPEHPK3PXP", 7); // -> '006676'

API

Notes

This library does not support any other secret input other than Base32. It is what is used standard most places, and by Google Authenticator. If your secrets are not Base32 forms, please use my Base32 library (the one I use as a dependency for this library) or any other base32 library to encode your secret before passing it into the functions. All generate functions force decode of Base32.

Global Settings

useTOTPPaddingForHOTP (bool, default: false) Uses the TOTP padding method for handling secrets bigger or smaller than the mandatory sizes for SHA256/SHA512. This is needed as HOTP does not have an official method of using SHA256 or SHA512 in the RFC spec and most libraries don't pad HOTP for use with SHA256 or SHA512. (examples: otplib and speakeasy from Node.js)

If you enable this, it will use the same padding as TOTP (repeating the secret to the right length) but might cause incompatibilies with other libraries. I am defaulting to no padding, as this is the predominant behavior I am finding for HOTP.

OTP.generateTOTPCode(String secret, int currentTime, {int length: 6, int interval: 30, Algorithm algorithm: Algorithm.SHA256, bool isGoogle: false})

Generate a code for the provided secret and time.

  • secret - (String) A Base32 String.
  • currentTime - (int) The current time in milliseconds.
  • length - (int) The length of the resulting code.
  • interval - (int) Refresh interval to get a new code.
  • algorithm - (Algorithm) Hashing method.
  • isGoogle - (bool) flag to turn off secret padding for Google Auth.

Returns an int code. Does not preserve leading zeros.

OTP.generateTOTPCodeString(String secret, int currentTime, {int length: 6, int interval: 30, Algorithm algorithm: Algorithm.SHA256, bool isGoogle: false})

Generate a code for the provided secret and time.

  • secret - (String) A Base32 String.
  • currentTime - (int) The current time in milliseconds.
  • length - (int) The length of the resulting code.
  • interval - (int) Refresh interval to get a new code.
  • algorithm - (Algorithm) Hashing method.
  • isGoogle - (bool) flag to turn off secret padding for Google Auth.

Returns an String code. Preserves leading zeros.

OTP.generateHOTPCode(String secret, int counter, {int length: 6})

Generate a code for the provided secret and time.

  • secret - (String) A Base32 String.
  • counter - (int) An int counter.
  • length - (int) the length of the resulting code.

Returns an int code. Does not preserve leading zeros

OTP.generateHOTPCodeString(String secret, int counter, {int length: 6})

Generate a code for the provided secret and time.

  • secret - (String) A Base32 String.
  • counter - (int) An int counter.
  • length - (int) the length of the resulting code.

Returns an String code. Preserves leading zeros

OTP.constantTimeVerification(final String code, final String othercode)

!DISCLAIMER! I can only get this to be within 1 millisecond between different codes and same codes. I have yet to get them to be equal. but 1 millisecond should be an OK room for error though.

Compares 2 codes in constant time to minimize risk of timing attacks.

  • code - (String) A Base32 String.
  • othercode - (String) A Base32 String.

Returns an bool if they match or not.

OTP.remainingSeconds({int interval = 30})

This will return the remaining seconds based on the lastUsedTime variable, that is only set when using generateTOTP* functions.

  • interval - (int) The interval you are using for your codes, defaults to the standard 30 seconds.

Returns an int of the remaining seconds.

Testing

pub run test

Release notes

See CHANGELOG.md

所属分类

依赖

依赖清单 3 项

源码仓库

使用此插件的项目