OTP一次性口令案例简介

OTP一次性口令(one time password),我们收到的短信验证码,就算是一种一次性口令,因为它只能使用一次,还有登陆时候验证码,就是那种歪歪扭扭的字~

实际上,这是一种增强验证的方式,短信验证码属于比较好的双因素验证,因为绑定了手机号,所以接收人就是唯一的,但是这也导致隐私问题泄露,比如国外的REG007就能花钱买到手机号注册的网站,如果发现你注册了某个色情APP,那不就很尴尬了嘛~

而登陆验证码也是一种双因素验证(划掉,感谢 @刀刀少 评论区的提醒,登录的验证码不算双因素),但是效果差一点,只能防君子,不能防小人,毕竟现在2021年了,OCR技术那么成熟,还是比较容易破解的,不过用君子打比方,也比较抬高大家了,毕竟只有研究(黑客划掉)网络安全的人,才会这么无聊去破解吧~

有那时间破解验证码,还不如学习一下CTF,学生时代打个比赛,它不香吗?不过话说回来,有些坑,还是要趁年轻去填一填的~

今天的主题是OTP,老规矩只看代码,不聊内幕。这是在研究零信任SDP软件定义边界的时候,有幸接触到的,简单学习了一点皮毛,在这里班门弄斧,密码学大佬轻喷哈~

  • TOTP(时间同步) 每次运行的时候,口令30秒内不变,是不是超级像短信验证码
  • HOTP(事件同步) 每次运行的时候,口令都会立即发生变化,是不是超级像登陆验证码

下面是2个具体的demo案例,两个OPT使用方法的差异非常小,但是网上很少能找到HOTP的案例(真的找不到),所以记录一下,以防止自己迷路,快速成长,少走弯路~

一、TOTP案例demo

516f6a4d2fb64d8d705a91d3abbfa2cc.png
# -*- coding: utf-8 -*-
"""
@Time : 2021/3/10 20:07
@Auth : ailx10
@File :demo-totp.py
@IDE :PyCharm
"""
import base64
import pyotp

string = "passwd"
key = base64.b32encode(string.encode(encoding="utf-8"))

totp_func = pyotp.TOTP(key)
my_key = totp_func.now()
print("一次性口令1:",my_key)

my_key2 = totp_func.now()
print("一次性口令2:",my_key2)

status = totp_func.verify(my_key)
print("一次性口令验证状态:",status)

二、HOTP案例demo

20d5296c90f51e9a8f01fe12efb158a0.png
# -*- coding: utf-8 -*-
"""
@Time : 2021/3/10 20:23
@Auth : ailx10
@File :demo-hotp.py
@IDE :PyCharm
"""
import base64
import pyotp
import random

string = "passwd"
key = base64.b32encode(string.encode(encoding="utf-8"))
random.seed(version=2)
r1 = random.randint(1,9999)
r2 = random.randint(1,9999)
hotp_func = pyotp.HOTP(key)
my_key = hotp_func.at(r1)
print("一次性口令1:",my_key)

my_key2 = hotp_func.at(r2)
print("一次性口令2:",my_key2)

status = hotp_func.verify(my_key,r1)
print("一次性口令验证状态:",status)

本篇完,谢谢大家~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ailx10

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值