#totp #hotp #2fa #otp

google-authenticator

这个Rust包可以用来与Google Authenticator移动应用进行交互,用于双因素认证。

7个不稳定版本

0.4.2 2023年5月6日
0.4.0 2023年3月9日
0.3.0 2021年11月15日
0.2.1 2020年7月22日
0.1.5 2018年4月16日

#61 in 认证

Download history 1100/week @ 2024-03-14 1024/week @ 2024-03-21 1205/week @ 2024-03-28 1219/week @ 2024-04-04 1031/week @ 2024-04-11 1218/week @ 2024-04-18 1015/week @ 2024-04-25 940/week @ 2024-05-02 1012/week @ 2024-05-09 1290/week @ 2024-05-16 1018/week @ 2024-05-23 1238/week @ 2024-05-30 1235/week @ 2024-06-06 1258/week @ 2024-06-13 1185/week @ 2024-06-20 739/week @ 2024-06-27

4,655 每月下载量
12 个包中使用 (7 直接)

MIT 协议

31KB
453

GoogleAuthenticator

Build Status Build Status

简介

这个Rust包可以用来与Google Authenticator移动应用进行交互,用于双因素认证。它可以生成密钥、生成验证码、验证验证码,并提供用于扫描密钥的二维码。它根据RFC6238实现了TOTP。更多关于Google Authenticator的信息,请参阅:Wiki

用法

将以下内容添加到您的Cargo.toml

[dependencies]
google-authenticator = "0.4"

C/C++库

您可以从src/authenticator.h中找到头文件,然后为目标构建库。

如何创建头文件和构建库,您可以参考以下案例。

您可能需要的工具: rust-lipo cbingen

## gen c/c++ header file
cbindgen ./ -l c --output src/authenticator.h

## clone registry
git clone https://github.com/hanskorg/google-authenticator-rust.git && cd google-authenticator-rust

## change Cargo.toml
crate-type = ["staticlib","cdylib"]
required-features = ["with-qrcode","clib"]

## build for MacOS and IOS
cargo lipo --features with-qrcode --targets aarch64-apple-darwin  x86_64-apple-darwin aarch64-apple-ios

## build for linux musl
cargo build --all-features  --lib --release --target x86_64-unknown-linux-musl

示例

use google_authenticator::GoogleAuthenticator;

fn main() {
    let secret = "I3VFM3JKMNDJCDH5BMBEEQAW6KJ6NOE3";
    let auth = GoogleAuthenticator::new();
    // let secret = auth.create_secret(32);
    let code = auth.get_code(&secret, 0).unwrap();

    assert!(auth.verify_code(&secret, &code, 1, 0).unwrap());
}
#[macro_use]
extern crate google_authenticator;
use google_authenticator::GA_AUTH;

fn main() {
    let secret = "I3VFM3JKMNDJCDH5BMBEEQAW6KJ6NOE3";
    if let Ok(code) = get_code!(&secret) {
        println!("{}", verify_code!(&secret, &code, 1, 0));
    }
}

获取密钥二维码

获取用于生成二维码的Google Charts URL

use google_authenticator::{GoogleAuthenticator, ErrorCorrectionLevel};

fn main() {
    let auth = GoogleAuthenticator::new();
    let secret = "I3VFM3JKMNDJCDH5BMBEEQAW6KJ6NOE3";
    println!(
        "{}",
        auth.qr_code_url(secret, "qr_code", "name", 200, 200, ErrorCorrectionLevel::High)
    );
}
#[macro_use]
extern crate google_authenticator;
use google_authenticator::GA_AUTH;

fn main() {
    let secret = "I3VFM3JKMNDJCDH5BMBEEQAW6KJ6NOE3";
    println!("{}", qr_code_url!(&secret, "qr_code", "name"));
}

获取SVG格式的二维码图像

Cargo.toml修改为

[dependencies.google-authenticator]
version = "0.4"
features = ["with-qrcode"]
use google_authenticator::{GoogleAuthenticator, ErrorCorrectionLevel};

fn main() {
    let secret = "I3VFM3JKMNDJCDH5BMBEEQAW6KJ6NOE3";
    let auth = GoogleAuthenticator::new();

    println!(
        "{}",
        auth.qr_code(secret, "qr_code", "name", 200, 200, ErrorCorrectionLevel::High)
            .unwrap()
    );
}
#[macro_use]
extern crate google_authenticator;
use google_authenticator::GA_AUTH;

fn main() {
    let secret = "I3VFM3JKMNDJCDH5BMBEEQAW6KJ6NOE3";
    if let Ok(url) = qr_code!(&secret, "qr_code", "name") {
        println!("{}", url);
    }
}

贡献者

感谢:JHZheng Conbas

常见问题解答

您可以为帮助发起新的issue。

依赖

~10–19MB
~42K SLoC