1 个稳定版本
1.0.5 | 2022年5月17日 |
---|
#959 在 身份验证 中
11KB
127 行
totp_embed
这是对原始 totp-lite 进行修改的分支,对 API 进行了一些更改,并增加了对 no_std
的支持。
fn totp1_tests() {
let secret: &[u8] = b"12345678901234567890";
assert_eq!(20, secret.len());
let pairs = vec![
(94287082, 59),
(07081804, 1111111109),
(14050471, 1111111111),
(89005924, 1234567890),
(69279037, 2000000000),
(65353130, 20000000000),
];
pairs.into_iter().for_each(|(expected, time)| {
assert_eq!(expected, totp::<Sha1>(secret, time));
});
}
有关详细信息,请参阅 totp-lite。
许可证:MIT
lib.rs
:
这是一个简单、正确的 TOTP 库。
基于时间的单次密码(TOTP)是一种有用的客户端认证方法,因为有效的密码在攻击者可能猜测之前就已经过期。此库提供符合其规范 RFC6238 的 TOTP 实现,以及一个简单的接口。
使用方法
totp
函数可能是您需要的。它使用默认的时间步长为 30 秒,并输出 8 位数字。
use std::time::{SystemTime, UNIX_EPOCH};
use totp_embed::{totp, Sha512};
// Negotiated between you and the authenticating service.
let password: &[u8] = b"secret";
// The number of seconds since the Unix Epoch.
let seconds: u64 = SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_secs();
// Specify the desired Hash algorithm via a type parameter.
// `Sha1` and `Sha256` are also available.
let result: u64 = totp::<Sha512>(password, seconds);
要完全控制算法的配置,请考虑使用 totp_custom
。
资源
依赖关系
~545KB
~11K SLoC