用于两因素身份验证码等用途的 TOTP 和 HOTP 的 .NET 实现。
Otp.NET 是在 C# 中实现 RFC 6238 的 TOTP 和 RFC 4226 的 HOTP 的一个实现。可以在 NuGet 中获取它 https://www.nuget.org/packages/Otp.NET powershell 安装包 Otp.NET 或 bash dotnet 添加包 Otp.NET 文档 - TOTP (定时一次性密码) - HOTP (基于 HMAC 的一次性密码) - OTP Uri - Base32 编码 TOTP (定时一次性密码) TOTP 是一种使用滚动时间窗口来计算一次性密码的算法。它通常用于双因素身份验证。Google Authenticator 应用程序使用 TOTP 来计算一次性密码。此库实现了在 C# 中的 TOTP 代码计算。它可以嵌入使用 Mono 的移动应用程序中,或者用于服务器端,仅用于验证提供的代码。创建 TOTP 对象 使用该库非常简单。有一个名为 Totp 的类。只需创建一个新实例,并将明文的共享秘密密钥传递给它作为一个字节数组。c# using OtpNet; c# var totp = new Totp(secretKey); 可以使用多种选项来更改代码的计算方式。这些选项都在 RFC 中提到。这些选项在创建 TOTP 对象时进行指定。可以使用不同的哈希算法来计算代码。默认值是 Sha1,但也可以使用 Sha256 和 Sha512。要从默认的 Sha1 改变此行为,只需在构造函数中传递所需的 OtpHashMode 枚举值。c# var totp = new Totp(secretKey, mode: OtpHashMode.Sha512); 时间步长窗口也可以指定。RFC 建议使用三十秒的窗口。这意味着每三十秒会生成一个新代码。如果需要,可以更改步长窗口。没有围绕此问题进行测试,因为 RFC 测试表中都使用了 30 秒的窗口,因此请自行承担使用此功能的风险。就像哈希模式一样,将此值传递给构造函数。它是一个表示秒数的整数。c# var totp = new Totp(secretKey, step: 15); // 每 15 秒生成一个新代码 最后,可以指定截断级别。基本上,这是您希望 TOTP 代码的位数。RFC 中的测试指定了 8,但 6 已经成为事实上的标准,而不是实际标准。对于此原因…
暂无开放 Issues,或尚未同步最近议题。