python google auth totp_Google Authenticator TOTP原理详解(以Python为例)
如果有疑问,请点击此处,然后发表评论交流,作者会及时回复(也可以直接在当前文章评论)。
-------谢谢您的参考,如有疑问,欢迎交流
一、 原理详解(图片可以点击然后放大查看)
二、 验证
1、下载Google谷歌身份验证器。
2、通过Python 的qrcode和pyotp模块生成二维码。
3、然后使用下载的谷歌身份验证器扫描生成的二维码
如果没有谷歌服务,则选择输入秘钥,在账户明处填入name参数,在秘钥处填入Secret即可。
4、对比手机上谷歌验证器显示的6位动态码,你会发现,和【原理详解】中代码计算处的6位动态码是一致的
三、 源码
1、计算Google Authenticator 6位动态码
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Google Authenticator工作原理 TOTP(Time-Based One-Time Password)
import hmac
import hashlib
import base64
import struct
import time
import pyotp
# setup 1 : base32 secret
Secret = 'userxiaosheng'
Secret += '=' * (8-len(Secret)%8) # py3中base64模块要求字符串必须为8的倍数,不足部分使用 = 补全
K = base64.b32decode(Secret,True)
# setup 2 : get current timestamp
# int(time.time()) // 30 到当前经历了多少个30秒
C = struct.pack(">Q", int(time.time()) // 30) # 将间隔时间转为big-endian(大端序)并且为长整型的字节
# setup 3 : start hmac-sha1
# hmac = SHA1(secret + SHA1(secret + input))
H = hmac.new(K,C,hashlib.sha1).digest() # 使用hmac sha1加密,并且以字节的方式取出 = b'\x0f\x1a\xaeL\x0c\x8e\x19g\x8dv}\xde7\xbc\x95\xeal\xa3\xc1\xee'
O = H[19] & 15 # bin(15)=00001111=0b1111
DynamicPasswd = str((struct.unpack(">I", H[O:O+4])[0] & 0x7fffffff) % 1000000)
# struct.unpack('>I',h[o:o+4])[0] -- 转为big-endian(大端序)并且不为负数的数字(整数),因为转换完是一个数组,类似"(2828101188,)",所以需要[0]取出
# h[o:o+4] -- 取其中4个字节 o=10 则取索引分别为 10,11,12,13的字节
# & 0x7fffffff = 11111111 -- 与字节转换的数字做与运算
# % 1000000 -- 得出的数字与1000000相除然后取余
TOTP = str(0) + str(DynamicPasswd) if len(DynamicPasswd) < 6 else DynamicPasswd
# passwd = passwd if len(passwd) < 6 else str(0) + str(passwd)
# 如果最后得出的6位数字,首位0,可能会只输出5位数字,所以这里进行一个判断,如果是5位则加上首位的0
print(TOTP)
2、生成二维码
from qrcode import QRCode
from qrcode import constants
Content = pyotp.totp.TOTP(Secret).provisioning_uri(name='xiaosheng', issuer_name="Verfiy Code")
# 在真实环境中,name的参数应该是和Secret有关联的,这样我们才能为每个不同的用户分别计算动态验证码.
qr = QRCode(version=1,
error_correction=constants.ERROR_CORRECT_L,
box_size=6,
border=4,)
qr.add_data(Content)
qr.make(fit=True)
img = qr.make_image()
img.save('./GoogleQR.png')
标签:Google,为例,Python,Secret,TOTP,str,time,import,hmac
python google auth totp_Google Authenticator TOTP原理详解(以Python为例)相关推荐
- google authenticator python_Google Authenticator TOTP原理详解(以Python为例)
http://xsboke.blog.51cto.com 如果有疑问,请点击此处,然后发表评论交流,作者会及时回复(也可以直接在当前文章评论). -------谢谢您的参考,如有疑问,欢迎交流 一. ...
- 视频教程-深度学习原理详解及Python代码实现-深度学习
深度学习原理详解及Python代码实现 大学教授,美国归国博士.博士生导师:人工智能公司专家顾问:长期从事人工智能.物联网.大数据研究:已发表学术论文100多篇,授权发明专利10多项 白勇 ¥88.0 ...
- 字典树原理详解及其Python实现
一.原理详解 1.初步介绍: 字典树又名前缀树,Trie树,是一种存储大量字符串的树形数据结构,经常被搜索引擎系统用于文本词频统计. 除此之外也常用于计算左右信息熵.计算点互信息. 下图演示了一个保存 ...
- Xgboost算法原理详解及python实现
Xgboost算法(回归树) 1.算法原理 2.对数据的要求(无需规范化) 3.算法的优缺点 4.XGB.GBDT.LR与RF 5.python代码实现 导入相关包 读取数据并预处理 训练 贝叶斯初步 ...
- 随机森林原理详解及python代码实现
随机森林(RF)算法 1.算法原理 2.对数据的要求(无需规范化) 3.算法的优缺点 4.算法需要注意的点 5.python代码实现(待更......) 导入相关包 读取数据并预处理(必须处理缺失值) ...
- 决策树原理详解及python代码实现
决策树算法(信贷中常用来寻找规则) 1.算法原理 1.1 ID3(多叉树分类) 1.2 C4.5(多叉树分类) 1.3 Cart(二叉树分类+回归) 2.ID3.C4.5与Cart比较 3.算法优缺点 ...
- KNN算法原理详解及python代码实现
KNN算法 算法原理 对数据的要求 算法的优缺点 算法需要注意的点 算法实现(python) 算法原理 计算待测样本与train_data的距离d并保存数组中 对d进行排序,取d最近的k个样本 统计样 ...
- 集成经验模态(EEMD)原理详解与python实现
文章目录 1 经验模态分解(EMD) 1.1 本征模态函数(IMF) 1.2 sifting算法 1.3 原始序列重构 2 集成经验模态分解(EEMD) 2.1 EEMD算法步骤 集成经验模态分解的关 ...
- python爬取微博恶评_详解用python写网络爬虫-爬取新浪微博评论
新浪微博需要登录才能爬取,这里使用m.weibo.cn这个移动端网站即可实现简化操作,用这个访问可以直接得到的微博id. 分析新浪微博的评论获取方式得知,其采用动态加载.所以使用json模块解析jso ...
最新文章
- Linux下安装Tomcat启动报错
- mysql对数据库的备份和还原
- 在ubuntu16下安装virtualenv+virtualenvwrapper
- C#设计模式(5)-Factory Method Pattern
- oracle 各种日期函数格式和操作
- 交换机的端口结构及端口类型
- 博士毕业论文英文参考文献换行_不用写毕业论文?一年制硕士真的不是闹着玩的吗...
- Log4j2 杀不死 Java
- 初学者,你应当如何学习C++以及编程-转
- 7 天 600 stars, Mobi.css 是如何诞生的
- matlab电力系统建模与仿真实验,基于MATLAB的小型电力系统的建模与仿真.doc
- centos安装tree命令
- java面向对象 封装 继承 多态
- 基于Python的指数基金量化投资 - 通过指数估值榜进行指数投资
- visio常用快捷键_Visio2019常用形状对象的快捷键及常用操作技巧举例(一)
- 计算机图像变为红色是什么故障,电脑显示器变成红色怎么办
- n维向量积(3维向量积的推广,向量算法)
- Vue中获取当前点击元素的父元素、子元素、兄弟元素
- win7电脑远程桌面连接提示已停止工作,但电脑没有蓝牙,不是受蓝牙影响,且影响电脑卡顿必须重启故障模块名称:StackHash_e1f3
- 将knif4j快速集成到springboot项目中
热门文章
- ubantu 安装redash
- ucint核心边缘分析_学术博客交流网络的核心—边缘结构分析实证研究.pdf
- android 手机安装怎么信任证书,Charles中关于手机证书安装以及信任
- 超实数是个“宝”,看看谁敢来抱一抱?
- lua能在stm32arm上运行吗_ARM版Mac将至,那么手机能运行PC操作系统吗
- Visdom常用功能
- 无线温度控制系统是如何解决传统温度监控系统存在的问题
- 之前是脚本方式启动nginx,现在想实现systemd方式来管理nginx服务
- 一个人的旅游(十一、成都、九寨沟)
- 递归计算(偶数求和)