最近在尝试着写个steam自动上架交易的程序,结果发现涉及的东西好多…
steam登录的时候需要输入手机令牌,手机令牌是动态生成的,每隔30s更新一次,断网的情况下也不会受影响
这种令牌大多是基于TOTP(TOTP是基于散列的消息认证码(HMAC)的示例。 它使用加密哈希函数将密钥与当前时间戳组合在一起以生成一次性密码。 )实现的,,,
根据秘钥和时间戳生成验证码的算法参考了sda的代码,改了N次之后终于正常了。。。
秘钥就是sda(steam desktop authenticator)生成的mafile文件中的shared_secrets,有了它就可以生成令牌验证码了

import sys
sys.path.append(r'E:\anaconda\Lib\site-packages')
from time import time
from Cryptodome.Hash import  HMAC,SHA1
import requests
from struct import pack,unpack
import json
from base64 import b64decode
from apscheduler.schedulers.background import BackgroundScheduler  two_factor_time_query_url = "https://api.steampowered.com/ITwoFactorService/QueryTime/v0001"#从文件中读入shared_secrets
with open(r'C:\Users\Administrator\Desktop\test_authenticator\data.txt') as fn:js = fn.read()dic = json.loads(js)  shared_secret = dic.get('shared_secret')
#得到时间补偿量,否则不能产生正确的code
def get_time_offset():twofactor_querytime_response = requests.post(url=two_factor_time_query_url, params={'http_timeout': 10}).json()ts = int(time())return int(twofactor_querytime_response.get('response', {}).get('server_time', ts)) - tsdef hmac_sha1(secret, data):return HMAC.new(secret, data, SHA1).digest()#根据校准后的时间生成令牌
def generate_twofactor_code_for_time(shared_secret,aligned_time):hmac = hmac_sha1(b64decode(shared_secret),pack('>Q', int(aligned_time)//30))  # this will NOT stop working in 2038start = ord(hmac[19:20]) & 0xFcodeint = unpack('>I', hmac[start:start+4])[0] & 0x7fffffffcharset = '23456789BCDFGHJKMNPQRTVWXY'code = ''for _ in range(5):codeint, i = divmod(codeint, len(charset))code += charset[i]return code  #two_factor_code = generate_twofactor_code_for_time(shared_secret,aligned_time)  def timedTask():aligned_time = int(time() + get_time_offset())     #补偿后的时间print('\rremain time:{0} {1}'.format(29 - aligned_time%30,generate_twofactor_code_for_time(shared_secret,aligned_time)),end='',flush=True)if __name__ == '__main__':# 创建后台执行的 schedulersscheduler = BackgroundScheduler()  # 添加调度任务# 调度方法为 timedTask,触发器选择 interval(间隔性),间隔时长为 2 秒scheduler.add_job(timedTask, 'interval', seconds=1)# 启动调度任务scheduler.start()

下一步研究一下

python模拟生成steam手机二次验证令牌相关推荐

  1. python绘制动态模拟图-Python 模拟生成动态产生验证码图片的方法

    模拟动态产生验证码图片 模拟生成验证码,首先要做的是生成随机的字母,然后对字母进行模糊处理.这里介绍一下 Python 提供的 Pillow 模块. Pillow PIL:Python Image L ...

  2. python模拟微信发红包,并验证随机性

    python模拟微信发红包,输入金额和红包个数,得到结果,多次发红包,验证先抢后抢红包大小的随机性是否一样. 1.思路 如100元发5个红包,结合几个点几个线段的数学知识,需要在0-100之间取4个不 ...

  3. python玩转android_今天玩点啥:利用Python模拟操作安卓手机实现刷dou音短视频浏览量...

    adb工具即Android Debug Bridge(安卓调试桥) tools.它就是一个命令行窗口,用于通过电脑端与模拟器或者真实设备交互.在某些特殊的情况下进入不了系统,adb就派上用场啦! Py ...

  4. python模拟生成股票K线历史数据

    量化分析通常需要大量历史数据,在回测时需要用到真实的历史数据.但在编写程序的过程中,可以自动生成一些模拟数据,用于程序调试.当程序调试好之后,再切换回真实的数据. 代码如下: # -*- coding ...

  5. python模拟生成真实的电话号码 / 姓名

    生成电话号码 def phone_num(self):num_start = ['134', '135', '136', '137', '138', '139', '150', '151', '152 ...

  6. python模拟点击手机_Python Appium 滑动、点击等操作

    1.手机滑动-swipe 查看源码 Ctrl + 鼠标右键点击 driver.swipe() 查看源码语法,起点和终点四个坐标参数. 手机屏幕从左上角开始为0,向右为x轴坐标,向下为y轴坐标. dur ...

  7. 手机二要素认证接口怎么用?手机号姓名验证怎么操作?

    手机二要素认证接口起源于数字手机时代,二十一世纪初期,互联网络诞生了网上电商.金融.通讯.网吧等产业,开始实行实名认证制. 手机二要素验证主要用于国内三大通信运营商业务(包括:移动.联通.电信三大运营 ...

  8. 如何用 Python 生成炫酷二维码及解析

    如今二维码可以说遍及了我们生活的各个角落,基本上我们的衣食住行都会见到二维码的身影.Python 用于生成及解析二维码的库为:qrcode.myqr 和 zxing,安装通过 pip install ...

  9. 用 Python 生成炫酷二维码及解析

    用 Python 生成炫酷二维码及解析 我们通过 Python 生成以及识别二维码需要用到的库为:qrcode.myqr.zxing, 安装通过 pip install qrcode/myqr/zxi ...

最新文章

  1. tcp、udp协议连接的建立和释放
  2. 23,148,855,308,184,500是一个神奇的数字,还是纯粹的机会?
  3. python流程控制-Python | 流程控制
  4. mysql设计表月份_mysql,表设计
  5. Django 的简单ajax
  6. 基于相关性分析系统性能瓶颈
  7. oracle to char trim,to_char前面多出空格
  8. JVM的内存管理 Ⅰ
  9. 【SQL】字符型函数
  10. 去掉重复值php,php多维数组去掉重复值
  11. 电大网络教育计算机应用基础,(热)最新电大奥鹏远程网络教育计算机应用基础题库.doc...
  12. 【重磅】Crust主网进入节点接入阶段
  13. SVN提交失败 can‘t open file‘\db\txn-current-lock’
  14. 通过QQ号码获取用户性别
  15. win32汇编琢石成器第三章笔记
  16. Python基础笔记_Day04_数据类型、math模块、random模块、string模块
  17. w5500跨网段_基于STM32F1的局域网通信模块W5500驱动
  18. 基于形态学的复杂背景目标检测算法
  19. 安卓获取设备及系统信息小结
  20. 【最佳实践】企业内网安全解决方案

热门文章

  1. 《Python自然语言处理(第二版)-Steven Bird等》学习笔记:第11章 语言数据管理
  2. 数字经济时代,什么是关键资源?
  3. 包装计算机辅助设计软件,产品包装与计算机辅助设计
  4. 20171010PotPlayer可以通过如下设置实现鼠标左百键单击暂停播度放
  5. 知识付费到底是什么?如何靠它赚钱?毕贤阁告诉你答案!
  6. 计算机中ppt,计算机中信息表示课件.ppt
  7. 论文阅读(三):Text2Sign: Towards Sign Language Production using Neural Machine Translation and GAN
  8. 论文解读 CSRNet: Dilated Convolutional Neural Networks for Understanding the Highly Congested Scenes
  9. Arch设置开机自动连接wifi网络:
  10. 2021年国开电大 复变函数 形考任务