Github 2FA 用户登录两步验证启用教程

举报
LYSHARK 发表于 2026/08/16 11:24:55 2026/08/16
【摘要】 GitHub 账号在长期使用过程中,通常会系统强制或主动要求开启两步验证(2FA)以提升账号安全性。目前主流的验证方式分为两种:一是使用微软官方 Authenticator 移动端验证器,操作便捷、适配手机日常使用;二是基于 TOTP 协议自行编写 Python 脚本,实现本地电脑动态验证码生成,适配桌面端使用场景。下文将详细演示 GitHub 两步验证的完整开启与配置流程。

GitHub 账号在长期使用过程中,通常会系统强制或主动要求开启两步验证(2FA)以提升账号安全性。目前主流的验证方式分为两种:一是使用微软官方 Authenticator 移动端验证器,操作便捷、适配手机日常使用;二是基于 TOTP 协议自行编写 Python 脚本,实现本地电脑动态验证码生成,适配桌面端使用场景。下文将详细演示 GitHub 两步验证的完整开启与配置流程。

1.首先登陆到github后台。

image.png

找到编辑按钮

image.png

扫描二维码,得到关键信息

image.png

并将SECRET_KEY填入到如下代码SECRET_KEY = "xxxxxxxxxxxx"

import tkinter as tk
from tkinter import ttk
import hashlib
import base64
import struct
import time
import hmac
import subprocess

SECRET_KEY = "xxxxxxxxxxxx"
WINDOW_TITLE = "GitHub TOTP"

def base32_decode_no_pad(s):
    s = s.upper().strip()
    pad_len = (8 - len(s) % 8) % 8
    s += "=" * pad_len
    return base64.b32decode(s)

def get_totp_code(secret, period=30, digits=6):
    key_bytes = base32_decode_no_pad(secret)
    timestamp = int(time.time())
    counter = timestamp // period
    counter_raw = struct.pack(">Q", counter)

    hmac_result = hmac.new(key_bytes, counter_raw, hashlib.sha1).digest()
    offset = hmac_result[-1] & 0x0F
    bin_code = struct.unpack(">I", hmac_result[offset:offset+4])[0] & 0x7FFFFFFF
    otp_code = bin_code % (10 ** digits)
    return f"{otp_code:0{digits}d}"

root = tk.Tk()
root.title(WINDOW_TITLE)
root.geometry("390x230")
root.resizable(False, False)

font_title = ("Microsoft YaHei", 12)
font_code = ("Microsoft YaHei", 40, "bold")
font_tip = ("Microsoft YaHei", 11)

tk.Label(root, text=WINDOW_TITLE, font=font_title).pack(pady=(15, 8))

code_label = tk.Label(root, text="------", font=font_code, fg="#0066dd", cursor="hand2")
code_label.pack(pady=5)

time_label = tk.Label(root, text="剩余:-- s(点击数字复制验证码)", font=font_tip)
time_label.pack()

progress_bar = ttk.Progressbar(root, maximum=30, length=320)
progress_bar.pack(pady=15)

def copy_code(event):
    code_text = code_label["text"]
    if code_text.isdigit():
        subprocess.run(["clip"], text=True, input=code_text)

code_label.bind("<Button-1>", copy_code)

def update_loop():
    remain = 30 - (int(time.time()) % 30)
    current_code = get_totp_code(SECRET_KEY)
    code_label.config(text=current_code)
    time_label.config(text=f"剩余有效期:{remain} 秒 [点击数字复制]")
    progress_bar["value"] = remain
    root.after(1000, update_loop)

update_loop()
root.mainloop()

运行程序,每次都会生成独特的KEY登录

image.png

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。