您现在的位置是:亿华云 > 人工智能
什么是双因素验证 2FA,如何用 Python 实现?
亿华云2025-10-04 00:42:56【人工智能】8人已围观
简介传统的用户名密码方式,容易泄漏,并不安全。你说,加上短信验证码不就安全了,其实短信验证码也是不安全的,容易被拦截和伪造,SIM 卡也可以克隆,已经有案例,先伪造身份证,再申请一模一样的手机号码,把钱转
传统的什双实现用户名密码方式,容易泄漏,因素验证并不安全。何用
你说,什双实现加上短信验证码不就安全了,因素验证其实短信验证码也是何用不安全的,容易被拦截和伪造,什双实现SIM 卡也可以克隆,因素验证已经有案例,何用先伪造身份证,什双实现再申请一模一样的因素验证手机号码,把钱转走。何用
因此就有了 Two-factor authentication,什双实现简称 2FA,因素验证也就是何用双因素验证。最常见的就是用户名密码,再加一个动态码。动态码通常由随身携带的移动设备上生成,比如 U 盾、手机。
动态码最常见的实现算法就是 One-Time Password(OTP),是基于时间的一次性密码,服务器托管它是公认的可靠解决方案,已经写入国际标准 RFC6238。比如我们最常用的 Google Authenticator,就是 OTP。
那么,知道了 2FA,接下来应该考虑的事,就是如何让你用 Python 写的网站实现 2FA。
轮子其实已经有了,那就是 PyOTP,结合自己的理解,分享一下它的用法。
1.安装pip 安装,不多说。
pip install pyotp2.配对配对就是移动设备和我们的 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) # => False4.那是不是手机上还有开发个 app ?不用,我们直接使用现成的 Google Authenticator 就可以了。
如果你已安装了 Google Authenticator,请点击 ➕ 添加密钥,然后扫描下发的二维码,就可以生成动态码:
然后你可以执行下面这段代码,就可以发现 pyotp 产生的动态码和 Google Authenticator 产生的网站模板是一致的:
import pyotp
totp = pyotp.TOTP("JBSWY3DPEHPK3PXP")
print("Current OTP:", totp.now())其实二维码的信息就是 JBSWY3DPEHPK3PXP。
这样,我们用 Google Authenticator 来产生动态密码,网站上进行二次验证,就可以实现 2FA 了。
很赞哦!(56992)
相关文章
- 用户邮箱的静态密码可能已被钓鱼和同一密码泄露。在没有收到安全警报的情况下,用户在适当的时间内不能更改密码。在此期间,攻击者可以随意输入帐户。启用辅助身份验证后,如果攻击者无法获取移动电话动态密码,他将无法进行身份验证。这样,除非用户的电子邮件密码和手机同时被盗,否则攻击者很难破解用户的邮箱。
- Apache Flink 漫谈系列 - 时间
- 京东APP百亿级商品与车关系数据检索实践
- 如何选择域名新后缀?有什么技巧?
- 解析之后一般在十分钟内生效,如果没有生效可以联系域名服务商进行沟通。
- 如何选择域名新后缀?有什么技巧?
- 关于前端大管家 Package.Json,你知道多少?
- vip域名属于哪个国家?vip域名如何?
- 为什么起域名意义非凡?起域名有什么名堂?
- date是什么域名?date域名续费难不难?