Google Authenticator(谷歌身份验证器)C#版

本文介绍了如何使用C#实现Google Authenticator的对接,包括TOTP和HOTP两种密令模式的原理,以及如何在程序中使用HMAC算法与认证器匹配。同时,文章提供了Android和iOS的认证器安装链接,并分享了一个C#案例的代码库链接。
摘要由CSDN通过智能技术生成
摘要:Google Authenticator(谷歌身份验证器),是谷歌公司推出的一款动态令牌工具,解决账户使用时遭到的一些不安全的操作进行的“二次验证”,认证器基于RFC文档中的HOTP/TOTP算法实现 ,是一种从共享秘钥和时间或次数一次性令牌的算法。在工作中可以通过认证器方式对账户有更好的保护,但是在查阅一些资料发现适合我这样的小白文章真的很少,针对于C#的文章就更加少了,本文主要是对C#如何使用Google Authenticator(谷歌身份验证器)进行探讨,有不足之处还请见谅。

Google Authenticator(谷歌身份验证器)

什么是认证器?怎么对接?

Google Authenticator(谷歌身份验证器)是微软推出的一个动态密令工具,它有两种密令模式。分别是“TOTP 基于时间”、“HOTP 基于计数器”,通过手机上 简单的设置就可以设定自己独一的动态密令, 那么我们怎么将我们的程序和认证器进行对接呢?其实谷歌认证器并不是需要我们对接这个工具的API而是通过算法来决定,谷歌使用使用HMAC算法生成密令,通过基于次数或者基于时间两个模板进行计算,因此在程序中只需要使用相同的算法即可与之匹配。

TOTP 基于时间
  • HMAC算法使用固定为HmacSHA1
  • 更新时长固定为30秒
  • APP端输入数据维度只有两个:账户名称(自己随意填写方便自己查看)和base32格式的key
HOTP 基于计数器

基于计数器模式是根据一个共享秘钥K和一个C计数器进行算法计算

认证器安装

手机需要安装认证器:

效果图

案例

控制台

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 
 6 namespace GoogleAuthenticator
 7 {
 8     class Program
 9     {
10         static void Main(string[] args)
11         {
12             long duration = 30;
13             string key = "xeon997@foxmail.com";
14             GoogleAuthenticator authenticator = new GoogleAuthenticator(duration, key);
15             var mobileKey = authenticator.GetMobilePhoneKey();
16 
17             while (true)
18             {
19 
20                 Console.WriteLine("手机端秘钥为:" + mobileKey);
21 
22                 var code = authenticator.GenerateCode();
23                 Console.WriteLine("动态验证码为:" + code);
24 
25                 Console.WriteLine("刷新倒计时:" + authenticator.EXPIRE_SECONDS);
26 
27                 System.Threading.Thread.Sleep(1000);
28                 Console.Clear();
29             }
30         }
31     }
32 }
View Code

 

认证器类

  1 using GoogleAuthorization;
  2 using System;
  3 using System.Security.Cryptography;
  4 using System.Text;
  5 namespace GoogleAuthenticator
  6 {
  7     public class GoogleAuthenticator
  8     {
  9         /// <summary>
 10         /// 初始化验证码生成规则
 11         /// </summary>
 12         /// &l
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值