动态令牌-(OTP,HOTP,TOTP)-基本原理:  https://www.cnblogs.com/navysummer/p/11943319.html

实现原理: https://blog.csdn.net/weixin_39868414/article/details/110985973

1、服务端首先要约定一个base32的密钥,并且把这个密钥与某个账户关联。

2、在页面显示一个二维码,内容是一个URI地址(otpauth://totp/账号?secret=密钥)。

3、通过手机端的谷歌身份验证器软件扫描这个二维码,使密钥保存在手机客户端

# -*- coding: utf-8 -*-
import base64
import hashlib
import hmac
import time
import datetime
import random as _randomdef byte_secret(secret):missing_padding = len(secret) % 8if missing_padding != 0:secret += '=' * (8 - missing_padding)return base64.b32decode(secret, casefold=True)def int_to_bytestring(i, padding=8):result = bytearray()while i != 0:result.append(i & 0xFF)i >>= 8return bytes(bytearray(reversed(result)).rjust(padding, b'\0'))#根据约定的密钥计算当前动态密码def generate_otp(secret):for_time = datetime.datetime.now()i = time.mktime(for_time.timetuple())input = int(i / 30)digest = hashlib.sha1digits = 6if input < 0:raise ValueError('input must be positive integer')hasher = hmac.new(byte_secret(secret),int_to_bytestring(input),digest)hmac_hash = bytearray(hasher.digest())offset = hmac_hash[-1] & 0xfcode = ((hmac_hash[offset] & 0x7f) << 24 |(hmac_hash[offset + 1] & 0xff) << 16 |(hmac_hash[offset + 2] & 0xff) << 8 |(hmac_hash[offset + 3] & 0xff))str_code = str(code % 10 ** digits)while len(str_code) < digits:str_code = '0' + str_codereturn str_code#随机生成一个base32密钥def random_base32(length=16, random=_random.SystemRandom(), chars=list('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567')):return ''.join(random.choice(chars)for _ in range(length))x=random_base32()
print(x)
y=generate_otp(x)
print(y)

如何使用:

【1】服务器端,使用random_base32函数生成一个随机密钥,并且把这个密钥与某个账户关联。

【2】以下A/B方案中选择其中一个:

A、在页面上显示这个密钥,用户复制这个密钥,粘帖到手机端的谷歌身份验证器。

B、在页面显示一个二维码,内容是一个URI地址(otpauth://totp/账号?secret=密钥)。用户通过手机端的谷歌身份验证器软件扫描这个二维码,使密钥保存在手机客户端。

服务端验证:

把上面生成的密钥传入generate_otp函数,可计算出当前动态密码。

动态令牌 (谷歌身份验证器)的实现相关推荐

  1. 使用谷歌身份验证器增强SSH安全

    一般大家都是使用账号和密码远程SSH登录管理服务器.但SSH账号和密码很容易泄露,或者经常遭遇暴力破解.咨询过前同事赛赛,他们目前使用了谷歌身份验证器.查看了谷歌身份验证器的github和其它网上文档 ...

  2. 如何为SSH登录建立双因子验证机制(谷歌身份验证器)?

    前言 默认情况下,SSH已经在远程机器之间使用安全的数据通信;但是如果你想为自己的SSH连接添加另外某种安全层,可以添加谷歌身份验证器(Google Authenticator)双因子验证模块,该模块 ...

  3. 使用谷歌身份验证器(Google Authenticator)保护你的后台

    为何要使用谷歌身份验证器 普通的网站只使用账号.密码.图形验证码进行后台登录.根据我(作为站长)多年的经验来看,这种方式安全性很低,尤其是使用 http 协议,明文的帐号和密码相当于在网络上裸奔.如果 ...

  4. 【SpringBoot】61、SpringBoot中使用谷歌身份验证器(Google Authenticator)实现二步身份验证

    Google 身份验证器 Google Authenticator 是谷歌推出的基于时间的一次性密码 (Time-based One-time Password,简称 TOTP),只需要在手机上安装该 ...

  5. 谷歌身份验证器 手表_6条使您的三星手表更加Google-y的提示

    谷歌身份验证器 手表 Samsung 三星 Samsung Galaxy watches are, arguably, the best smartwatches for Android phones ...

  6. 使用C++实现谷歌身份验证器(Google Authenticator)

    使用C++实现谷歌身份验证器(Google Authenticator) 本机环境: windows10 x64位运行环境 1.进入网站:http://slproweb.com/products/Wi ...

  7. 二次验证码小程序与谷歌身份验证器不同点是?

    名称1[二次验证码]小程序 名称2 谷歌身份验证器(Google Authenticator) 粗略对比两个产品异同 [二次验证码]小程序 搜索:微信搜索.微信目前65个小程序入口,倒是容易找到它 使 ...

  8. Google Authenticator windows client 谷歌身份验证器 windows 电脑端

    谷歌身份验证器现在有安卓客户端和ios客户端,本人开发了一个windows客户端,基于 .NETFramework v4.7 开发,已在 github 上开源,可以在 github 上直接下载. gi ...

  9. 谷歌身份验证器代码实现

    手机下载谷歌身份验证器,无需联网也可以用. 工具类 public class GoogleAuthenticator{// 生成的key长度( Generate secret key length)p ...

最新文章

  1. windows10 中 python3 离线 安装包,没有 网络 的 情况下 安装 whl包
  2. mysql Replication机制
  3. TCP/IP协议模型详解
  4. 常用API-1(Object类、String类、StringBuffer类、StringBuilder类)
  5. error while loading shared libraries:libmysqlclient.so.18 错误
  6. Java 的Comparator比较器用法
  7. 树莓派开机运行python脚本_【树莓派】开机自启动脚本方法之一(.Desktop文件)...
  8. 【转载】关于HttpClient 接口方法总结
  9. 腾讯看点CTO徐羽: QQ浏览器背后的推荐AI中台 | AICon
  10. 原型模式(Prototype)解析例子
  11. 项目管理 : 需求管理的6个流程
  12. 微信小程序引入UI组件库
  13. css3 呼吸的莲花_心肾呼吸法—莲花能量冥想*
  14. 弱水三千,只取一瓢,当图像搜索遇见PostgreSQL(Haar wavelet)
  15. 意图推荐 Metapath-guided Heterogeneous Graph Neural Network for Intent Recommendation
  16. 15 个边玩游戏边学编程的网站
  17. 输入N,求N以内(包括N)的质数之和
  18. 李白《月下独酌-花间一壶酒》的UML建模
  19. 关于我使用vue-quill-editor遇到的一些“坑”
  20. matlab psb,基于Matlab_PSB的电路仿真分析

热门文章

  1. 华为od机考题目-考古学家
  2. python公司基本面_Python读年报12-获得公司财务基本面信息
  3. 用KNN分类器进行猫狗分类
  4. 学习记录--生成微信url schema
  5. pyalgotrade量化回测框架简单试用
  6. FFmpeg拉取rtmp流转udp输出播放
  7. 走进“开源SDR实验室” 一起玩转GNU Radio:gr-qtgui
  8. 画思维导图用什么软件比较好?来看看这些实用的软件
  9. 现在学UI设计有前途吗?UI设计收入大概多少
  10. 电脑端用火狐浏览器访问wap站点