Python实现双因素验证2FA的示例代码

目录
  • 介绍
  • 1.安装
  • 2.配对
  • 3.验证
  • 4.那是不是手机上还有开发个 app

介绍

传统的用户名密码方式,容易泄漏,并不安全。

你说,加上短信验证码不就安全了,其实短信验证码也是不安全的,容易被拦截和伪造,SIM 卡也可以克隆,已经有案例,先伪造身份证,再申请一模一样的手机号码,把钱转走。

因此就有了 Two-factor authentication,简称 2FA,也就是双因素验证。最常见的就是用户名密码,再加一个动态码。动态码通常由随身携带的移动设备上生成,比如 U 盾、手机。

动态码最常见的实现算法就是 One-Time Password(OTP),是基于时间的一次性密码,它是公认的可靠解决方案,已经写入国际标准 RFC6238。比如我们最常用的 Google Authenticator,就是 OTP。

那么,知道了 2FA,接下来应该考虑的事,就是如何让你用 Python 写的网站实现 2FA。

轮子其实已经有了,那就是 PyOTP,结合自己的理解,分享一下它的用法。

1.安装

pip 安装,不多说。

pip install pyotp

2.配对

配对就是移动设备和我们的 web 服务器配对。

首先,在服务器上使用如下代码生成一次性密钥:

>>> import pyotp
>>> pyotp.random_base32()
'BZ4TOJD4JWWJWPQBKP23FA55EMHA25Y2'
>>>

然后将这个密钥以二维码的形式让手机(移动设备)扫描,扫描之后,手机上的应用就保存了这个密钥。

3.验证

接下来,在手机上就可以使用下面这段逻辑产生动态密码了。

>>> totp = pyotp.TOTP('BZ4TOJD4JWWJWPQBKP23FA55EMHA25Y2')
>>> totp.now()
'941782'
>>>

现在,你有 30 秒的时间将这个 6 位数密码提交到服务器(输入到网页上),服务器服务器也使用同样的密钥和当前时间戳,生成一个动态码,跟用户提交的动态码比对。只要两者不一致,就验证失败,也就是下面这段逻辑,如果超过 30 秒,(当然,30 秒可以自定义),也会失效:

>>> totp = pyotp.TOTP('BZ4TOJD4JWWJWPQBKP23FA55EMHA25Y2')
>>> totp.verify('941782')
True
>>> time.sleep(30)
>>> totp.verify('941782')
False

除了使用基于时间的动态密码,也可以用基于计数的动态密码,逻辑如下:

hotp = pyotp.HOTP('base32secret3232')
hotp.at(0) # => '260182'
hotp.at(1) # => '055283'
hotp.at(1401) # => '316439'

# OTP verified with a counter
hotp.verify('316439', 1401) # => True
hotp.verify('316439', 1402) # => False

4.那是不是手机上还有开发个 app

不用,我们直接使用现成的 Google Authenticator 就可以了。

如果你已安装了 Google Authenticator,请点击 :heavy_plus_sign: 添加密钥,然后扫描下发的二维码,就可以生成动态码:

然后你可以执行下面这段代码,就可以发现 pyotp 产生的动态码和 Google Authenticator 产生的是一致的:

import pyotp
totp = pyotp.TOTP("JBSWY3DPEHPK3PXP")
print("Current OTP:", totp.now())

其实二维码的信息就是 JBSWY3DPEHPK3PXP。

这样,我们用 Google Authenticator 来产生动态密码,网站上进行二次验证,就可以实现 2FA 了。

到此这篇关于Python实现双因素验证2FA的示例代码的文章就介绍到这了,更多相关Python双因素验证2FA内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  •  分享Python 中的 7 种交叉验证方法

    目录 一.什么是交叉验证? 二.它是如何解决过拟合问题的? 1.HoldOut交叉验证 2.K折交叉验证 3.分层K折交叉验证 4.LeavePOut交叉验证 5.留一交叉验证 6.蒙特卡罗交叉验证(ShuffleSplit) 7.时间序列交叉验证 在任何有监督机器学习项目的模型构建阶段,我们训练模型的目的是从标记的示例中学习所有权重和偏差的最佳值. 如果我们使用相同的标记示例来测试我们的模型,那么这将是一个方法论错误,因为一个只会重复刚刚看到的样本标签的模型将获得完美的分数,但无法预测任何有用

  • Python实现滑块拼图验证码详解

    目录 初级版滑块拼图验证码 补充知识点 高级版滑动拼图验证码 滑动拼图验证码可以算是滑块验证码的进阶版本,其验证机制相对复杂.本节将介绍两种滑动拼图验证码:初级版和高级版本. 初级版滑块拼图验证码 初级版滑动拼图验证码是在普通滑块验证码的基础上增加了随机的滑动距离,用户需要根据拼图的缺口位置来决定滑块的滑动位置. 如下左图所示为一个滑块拼图验证码的起始状态,注意此时还没有显示拼图和缺口.单击滑块后就会出现拼图和缺口,如下右图所示.之后会利用这一特性来找到拼图和缺口的位置. 下面开始编写代码.首先

  • 利用Python生成随机验证码详解

    目录 1.先搞环境 2.开始码代码 3. 加干扰 4. 加入更多的干扰 5. 验证码 + 随机字符 6. 验证码保存本地(选) 最近感觉被大数据定义成机器人了,随便看个网页都跳验证码. 怎么用python绕验证码是个令人头秃的事情, 我投降!那么今天手把手教大家如何写验证码,去为难别人,让他们头秃. 说错了,其实就是教大家如何通过python代码去生成验证码~~ 1.先搞环境 1.我们需要你电脑有python3.4以上的版本 2.pip安装PIL包 pip install pillow 3.默念

  • Python通用验证码识别OCR库之ddddocr验证码识别

    目录 前言 传统验证码 滑动验证码 文字点选验证码 总结 前言 相信做自动化测试的同学一定不可忽视的问题就是验证码,他几乎是一个网站登录的标配,当然,我一般是不建议在这上面浪费时间去做识别的. 举个例子,现在你的目的是进入自己家的房子,房子为了防止小偷进入于是上了一把锁.我们没必要花费力气去研究开锁技术.去找锁匠配置一把万能钥匙(让开发设置验证码的万能码),或者干脆先去上锁匠把验证码去掉(让开发暂时屏蔽验证码).严格来说识别验证码不是我们自动化测试的重点.除非你是验证码厂商的员工,破解识别验证码

  • Python实现双因素验证2FA的示例代码

    目录 介绍 1.安装 2.配对 3.验证 4.那是不是手机上还有开发个 app 介绍 传统的用户名密码方式,容易泄漏,并不安全. 你说,加上短信验证码不就安全了,其实短信验证码也是不安全的,容易被拦截和伪造,SIM 卡也可以克隆,已经有案例,先伪造身份证,再申请一模一样的手机号码,把钱转走. 因此就有了 Two-factor authentication,简称 2FA,也就是双因素验证.最常见的就是用户名密码,再加一个动态码.动态码通常由随身携带的移动设备上生成,比如 U 盾.手机. 动态码最常

  • python画双y轴图像的示例代码

    很多时候可能需要在一个图中画出多条函数图像,但是可能y轴的物理含义不一样,或是数值范围相差较大,此时就需要双y轴. matplotlib和seaborn都可以画双y轴图像. 一个例子: import seaborn as sns import matplotlib.pyplot as plt # ax1 for KDE, ax2 for CDF f, ax1 = plt.subplots() ax1.grid(True) # ax1.set_ylim(0, 1) ax1.set_ylabel('

  • Python+Matplotlib绘制双y轴图像的示例代码

    目录 双Y轴图简介 实现思路 实现代码 样式一 样式二 双Y轴图简介 双Y轴图顾名思义就是在一个图里有两个Y轴.这种图形主要用来展示两个因变量和一个自变量的关系并且两个因变量的数值单位还不同.如我们想要展示不同月份公司销业绩以及成本的变化情况这时就可以用双Y轴图来展示.(因变量销量和成本具有不同的单位). 实现思路 绘制双y轴的思想,也是用到了matplotlib面向对象绘图的思想.在不指定位置的情况下,在一个画布上创建出两个坐标系,其中第一个坐标系正常创建,第二个坐标系则使用专有的twinx(

  • python实现xml转json文件的示例代码

    使用了Python的 xml.etree.ElementTree 库 xml.etree.ElementTree 库简介 xml.etree.ElementTree模块实现了一个简单而高效的API用于解析和创建XML数据.xml.etree.ElementTree模块对于恶意构造的数据是不安全的.如果您需要解析不受信任或未经验证的数据,请参阅XML漏洞. 参考文献:https://docs.python.org/3.6/library/xml.etree.elementtree.html fro

  • python实现布尔型盲注的示例代码

    好久没写python了,就想着写个简单的练练手,写个布尔型盲注自动化脚本,我觉得这个功能写的非常全了,这里是参考sqli-labs里面的盲注漏洞进行的脚本编写. 脚本运行时间:6分半左右 bool_sqlblind.py # -*- coding:utf-8 -*- # Author: mochu7 import requests def ascii_str():#生成库名表名字符所在的字符列表字典 str_list=[] for i in range(33,127):#所有可显示字符 str_

  • python通过PyQt5实现登录界面的示例代码

    目录 1. pyQt5简单使用 安装 界面化操作 2.开始实现登录界面 今天为大家介绍一个利用开发登录界面模板,基于pyqt5库,pyqt5这也一个PythonGUI界面开发的库,非常强 本例,展示了通过登录界面打开主界面的实现方式. 在开始实现登录界面前,先给大家普及一下PyQt5的安装以及使用 1. pyQt5简单使用 安装 pip install PyQt5 pip3.5 install pyqt5-tools 界面化操作 1.在win+R中输入designer并敲回车,即可启动Desig

  • Python实现识别图像中人物的示例代码

    目录 前言 环境部署 代码 总结 前言 接着上一篇:AI识别照片是谁,人脸识别face_recognition开源项目安装使用 根据项目提供的demo代码,调整了一下功能,自己写了一个识别人脸的工具代码. 环境部署 按照上一篇的安装部署就可以了. 代码 不废话,直接上代码. #!/user/bin/env python # coding=utf-8 """ @project : face_recognition @author : 剑客阿良_ALiang @file : te

  • Python和Matlab实现蝙蝠算法的示例代码

    目录 1前言 2 蝙蝠算法原理细讲 3 详细步骤 4Python实现 4.1代码 4.2结果 5Matlab实现 5.1 代码 5.2 结果 5.3 展望 1 前言 蝙蝠算法是2010年杨教授基于群体智能提出的启发式搜索算法,是一种搜索全局最优解的有效方法.该算法基于迭代优化,初始化为一组随机解,然后迭代搜寻最优解,且在最优解周围通过随机飞行产生局部新解,加强局部搜索速度.该算法具有实现简单.参数少等特点. 该算法主要用于目标函数寻优,基于蝙蝠种群利用产生的声波搜索猎物和控制飞行方向的特征来实现

  • Laravel 5.5 的自定义验证对象/类示例代码详解

    Laravel 5.5 将提供一个全新的自定义验证规则的对象,以作为原来的 Validator::extend 方法的替代. Laravel 5.5 将提供一个全新的自定义验证规则的对象,以作为原来的 Validator::extend 方法的替代..很多时候我们会直接用正则表达式来处理这种特殊的验证,也有时候我们会选择用 Validator::extend 来扩展一个自定义的规则.但在 Laravel 5.5 版本中,我们有了新的手段,只要定义一个实现 Illuminate\Contracts

  • Android自定义滑动验证条的示例代码

    本文介绍了Android自定义滑动验证条的示例代码,分享给大家,具体如下: *注:不知道为什么,h5的标签在这里没用了,所以我也只能用Markdown的语法来写了 项目地址:https://github.com/994866755/handsomeYe.seekbar.github.io 需求: 在我们的某些应用中需要滑动验证.比如说这个样子的: 刚开始我也很懵逼要怎么去弄,结果我去看了一些人的代码,有人是用自定义viewgroup去做,就是viewgroup包含滑动块和滑动条.但我觉得太麻烦,

随机推荐