TOTP 驗證碼產生器

輸入金鑰即可在瀏覽器中產生 TOTP 兩步驗證碼,相容 Google Authenticator 等應用

TOTP 驗證碼就是每 30 秒變化一次的 6 位兩步驗證碼:驗證器應用和伺服器各自用同一份共享金鑰和目前時間獨立算出它(RFC 6238)。把開啟兩步驗證時拿到的 Base32 金鑰貼進來——或者貼上 QR 碼背後的整條 otpauth:// 連結——本頁就會即時顯示目前驗證碼、下一個驗證碼和倒數圓環,全部計算都在你的瀏覽器裡完成:金鑰不傳送、不保存、不記錄。配套指南《TOTP 驗證碼是怎麼算出來的》講清了原理與時鐘問題;其他憑據可以搭配密碼與權杖產生器和SSH 金鑰套件一起打理。

最後更新:

貼上開啟兩步驗證時顯示的 Base32 金鑰(空格會被自動忽略),或整條 otpauth:// 連結——其中發行方、帳號、演算法、位數和週期會被自動解析。金鑰有效後立即開始出碼。

--- ---

輸入金鑰後自動產生驗證碼

進階設定

🔒 所有計算均在瀏覽器本地完成,金鑰不會傳送到任何伺服器,也不會被保存。

正在與伺服器時間比對你的時鐘…

你的驗證碼

還沒有帳號。在上方新增一個金鑰,它的驗證碼就會出現在這裡,並按週期重新整理。這裡不保存任何東西——重新整理頁面列表就會清空。

先把邊界說清

本頁是給你已經擁有的驗證碼行個方便——手機在另一個房間充電,或者正把金鑰從一個驗證器應用遷移到另一個。它不是長期保管金鑰的安全場所:貼進來的內容會留在這個分頁的記憶體裡,直到你關掉它,而這台機器上的其他軟體同樣讀得到記憶體。

驗證碼產生器是否可信,取決於它執行的裝置和瀏覽器。對重要的帳號,把金鑰放在專門的驗證器應用或你掌控的硬體金鑰裡;只在你信任的裝置上使用本頁,絕不要在共享或公共電腦上用。

TOTP 只能證明你在登入那一刻持有金鑰;它保護不了一份已經洩露的金鑰。如果金鑰曾被貼進聊天、工單或伺服器端產生器,就當它已經燒掉了:去服務裡把兩步驗證關掉再重新開啟,換一份新金鑰。

什麼時候該用瀏覽器裡的 TOTP 產生器

最典型的場景是設定和遷移。開啟兩步驗證時,服務會顯示一個 QR 碼,並在「無法掃碼?」連結後面給出原始的 Base32 金鑰。把金鑰輸到這裡,把產生的驗證碼和驗證器應用裡的對比一致,就證明兩台裝置持有的是同一份金鑰——不用等到登出後才發現對不上的尷尬。同樣的檢查也適用於給帳號換手機:逐個重新讀取金鑰、新增到本頁,逐視窗確認與舊應用的驗證碼一致。

另一個實用場景是手機不在手邊、但金鑰妥善存在你的密碼管理器裡:取出金鑰、在這裡產生驗證碼、完成登入——不必為了應急去關掉兩步驗證、削弱帳號。從 Google、GitHub 到 AWS 和你的網域註冊商,所有服務用的都是同一套 RFC 6238 方案,所以一個產生器就能覆蓋你持有金鑰的每一個帳號。

QR 碼裡到底裝了什麼

每個驗證器 QR 碼都只是一行文字:一條 otpauth:// URI,裝著金鑰、發行方、你的帳號名和驗證碼參數(演算法、位數、週期)。這正是本頁能接受整條連結的原因——貼進來,每個欄位都會自動填好。也正因為如此,設定 QR 碼的截圖和密碼本身一樣敏感:掃到它的人就永久複製了你的第二因素。絕不要分享設定截圖,也記得把它們從同步相簿裡刪掉。

驗證碼能否被接受,取決於兩個細節。第一是時鐘:產生方和伺服器必須落在同一個 30 秒視窗內,多數伺服器只寬容前後各一個視窗,時鐘差上一分鐘就會次次失敗。第二是參數:多數服務用 SHA-1、6 位、30 秒,但也有用 8 位或 60 秒週期的——如果這裡的驗證碼始終對不上服務,就對照它設定頁面寫明的參數檢查進階設定。

TOTP 術語,一次說清

TOTP. 基於時間的一次性密碼(RFC 6238):對時間步計數器做 HMAC,再動態截斷成一串短數字驗證碼。

HOTP. 基於計數器的父演算法(RFC 4226)。TOTP 就是把計數器換成「自 Unix 紀元起的週期數」的 HOTP。

Base32. 多數 2FA 金鑰使用的字母表(A–Z 和 2–7)。32 個字元的金鑰裝著 20 位元組、即 160 位的金鑰材料。

otpauth://. 每個設定 QR 碼裡裝的 URI 格式:類型、標籤、金鑰、發行方、演算法、位數和週期,全在一行裡。

時間步. 通常是 30 秒。產生方和伺服器必須落在同一時間步內;多數伺服器還會接受前後各一個時間步。

動態截斷. 把 20 多位元組的 HMAC 變成短驗證碼的那一步:按摘要最後一個半位元組給出的偏移,切出 4 個位元組。

SHA-1. 至今仍是 TOTP 預設的 HMAC 雜湊。這個構造在這裡依然成立,因為 HMAC 的安全性不依賴抗碰撞性。

備用代碼. 服務在設定時發的一次性恢復代碼。它們完全繞過 TOTP——請像密碼一樣保管,且絕不要和金鑰放在一起。

時鐘偏差. 裝置時鐘與真實時間之間的差距。偏差超過一個週期,金鑰再正確,產生的驗證碼也會全錯。

常見問題

在瀏覽器裡產生 2FA 驗證碼安全嗎?

在本頁,金鑰不會離開你的瀏覽器:驗證碼用 WebCrypto 在頁面記憶體中計算,不上傳、不保存、不記錄,重新整理即清除金鑰。不安全的模式是伺服器端產生器——你的金鑰會穿過網路,躺進別人的日志和資料庫。即便在本地,也請只用你信任的裝置——金鑰的安全性取決於輸入它的那台機器。

為什麼我的驗證碼會被拒絕?

最常見原因是時鐘:如果產生驗證碼的裝置與伺服器對目前 30 秒視窗的判斷不一致,每個碼都是錯的。看本頁的時鐘卡,並開啟自動設定日期與時間。接下來懷疑參數(有的服務用 8 位或 60 秒週期)和過期金鑰——如果你重新開啟過兩步驗證,舊金鑰在那一刻就作廢了。

TOTP 和 HOTP 有什麼區別?

區別在計數器。HOTP(RFC 4226)每用一次就把計數器加一;TOTP(RFC 6238)從時鐘推導計數器,所以驗證碼會自己過期。驗證器應用和本頁用的都是 TOTP。基於計數器的 HOTP 連結確實存在,但本頁會明確拒絕它,而不是編一個驗證碼出來。

它能替代我的驗證器應用嗎?

頁面打開期間,它產生的驗證碼完全一致——演算法是同一套。但作為長期住所不行:這裡按設計不持久保存任何東西,瀏覽器分頁也不是長命金鑰該待的地方。把金鑰留在驗證器應用或密碼管理器裡,本頁用於設定檢查、遷移和應急。

我曾經把金鑰貼進過聊天框,怎麼辦?

把它當作已經洩露。聊天記錄會被記錄、同步和搜尋,拿到金鑰的人可以永遠產生你的驗證碼。去服務裡把兩步驗證關掉再重新開啟,換一份新金鑰、重新綁定驗證器,並檢查帳號的近期活動。然後用密碼洩露檢查順手查一下密碼本身。