# Scm.Otp **Repository Path**: openscm/scm.otp ## Basic Information - **Project Name**: Scm.Otp - **Description**: 一个用于生成和验证一次性密码(One Time Password)的 C# 类库 - **Primary Language**: C# - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-05 - **Last Updated**: 2025-12-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Scm.Otp ## 介绍 Scm.Otp 是一个用于生成和验证一次性密码(One Time Password)的 C# 类库。它支持 HOTP(基于事件的一次性密码) 和 TOTP(基于时间的一次性密码)两种标准协议,可以用于实现双因素认证(2FA)等功能。 支持RFC标准如下: - HOTP:支持[RFC 4226](https://datatracker.ietf.org/doc/html/rfc4226)标准; - TOTP:支持[RFC 6238](https://datatracker.ietf.org/doc/html/rfc6238)标准。 ### 补充说明: 1. **关键术语解析**: - **HMAC(Hash-Based Message Authentication Code)**:基于哈希的消息认证码,是一种通过哈希算法(如SHA-1、SHA-256)和密钥生成认证信息的技术,确保数据传输过程中不被篡改; - **RFC(Request for Comments)**:请求评论文档,是互联网工程任务组(IETF)发布的技术标准文档,文中RFC 4226和RFC 6238分别是HOTP和TOTP的官方技术规范,定义了密码的生成算法、验证逻辑等核心规则; - **MFA/2FA**:多因素认证(MFA)指通过两种或两种以上“认证因素”(如密码+手机验证码、密码+指纹)验证身份,双因素认证(2FA)是MFA的常见形式,仅需两种认证因素,二者均用于提升账户安全性,避免单一密码泄露导致的风险。 2. **应用场景示例**: 常见于网银登录、社交媒体账户安全验证、企业办公系统登录等场景,例如用户输入账号密码后,还需通过手机APP(如Google Authenticator)获取实时生成的TOTP码,完成二次验证才能登录。 ## 软件架构 该项目由以下几个核心部分组成: - **OtpAuth(抽象类)**:定义了生成和验证一次性密码的基本接口。 - **HotpAuth(HOTP 实现)**:基于计数器的一次性密码实现。 - **TotpAuth(TOTP 实现)**:基于当前时间的一次性密码实现。 - **OtpConfig**:用于配置一次性密码生成器的参数,如密钥、算法、代码长度等。 - **OtpHashAlgorithm(枚举)**:支持的哈希算法类型,如 SHA1、SHA256、SHA512 等。 ## 安装教程 1. 从 release 目录获取 `Scm.Otp.dll` 文件。 2. 在你的项目中引用该 DLL 文件。 ## 使用说明 ### 生成和验证 HOTP ```csharp var hotp = new HotpAuth(); string secretKey = "YOUR_SECRET_KEY"; string code = hotp.GenerateCode(secretKey); // 生成 HOTP 码 bool isValid = hotp.VerifyCode(secretKey, code); // 验证 HOTP 码 ``` ### 生成和验证 TOTP ```csharp var totp = new TotpAuth(); string secretKey = "YOUR_SECRET_KEY"; string code = totp.GenerateCode(secretKey); // 生成 TOTP 码 bool isValid = totp.VerifyCode(secretKey, code); // 验证 TOTP 码 ``` ### 生成 OTP 配置 URL(可用于二维码生成) ```csharp var config = new OtpConfig { Issuer = "YourApp", Account = "user@example.com", Secret = OtpAuth.GenerateRandomKey(), // 生成随机密钥 Algorithm = OtpHashAlgorithm.SHA256, CodeLength = 6 }; string url = totp.GenerateOtpUrl(config); // 生成 OTP 配置 URL ``` ## 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request ## 许可证 本项目遵循 MIT 许可证。有关详细信息,请参阅 [LICENSE](LICENSE) 文件。