實用工具
輸入
結果
結果會顯示在這裡。開發或排查兩步驟驗證登入時,常常需要看到伺服器此刻預期的驗證碼,又不想每次都拿出手機。貼上 Base32 金鑰或完整的 otpauth:// 連結,這裡會顯示目前這個 30 秒時段的驗證碼、還剩幾秒,以及前後相鄰時段的驗證碼。輸入留空時,會產生一組新的 160 位元金鑰和對應的 otpauth:// 連結,需要的話還能產生一個驗證器 App 可以直接掃描的 QR Code。計算由 otpauth(hectorm/otpauth,MIT)完成,這是一個同時支援瀏覽器、Node、Deno 和 Bun 的 HOTP/TOTP 函式庫,至今仍持續維護。
它是怎麼運作的
- 依 RFC 6238 計算:Unix 時間除以週期得到計數器,以金鑰對它做 HMAC-SHA1(或 SHA-256/512),再依 RFC 4226 的動態截斷取 6 位或 8 位數字。
- otpauth:// 連結自帶演算法、位數和週期,會以連結為準並忽略下拉選單;只填 Base32 金鑰時,則由下拉選單以及發行者、帳號組出連結。
- 同時列出上一組驗證碼,因為多數伺服器允許前後各一個週期的時鐘誤差;如果手機上的碼總是等於「上一組」,通常代表裝置時間慢了。
- QR Code 預覽編碼的是完整的 otpauth:// 連結,只有開啟開關時才會呼叫 qrcode 套件繪製。
你的資料去了哪裡
哪也沒去。本工具完全在你的瀏覽器裡執行:你貼上的文字由頁面處理,不會傳輸到任何伺服器,也不會寫進任何紀錄。
本工具會接觸金鑰與憑證,因此任何一次執行都不會被儲存,連你自己的歷史裡也不會有。
它要花多少
本工具完全免費,不需要登入,也不消耗點數。
常見問題
- 手機 App 上的驗證碼和這裡不一樣,為什麼?
- 絕大多數是時間或參數的問題。先確認手機已開啟自動設定時間——慢 30 秒就會永遠落後一組。再核對演算法、位數和週期:許多驗證器 App 只認 SHA1、6 位數、30 秒,遇到其他值會默默忽略,因此伺服器設定為 SHA-256 或 8 位數時,App 顯示的碼會被拒絕。
- TOTP 金鑰應該多長?
- RFC 4226 要求至少 128 位元,建議 160 位元,也就是 32 個 Base32 字元,較短的會被標示出來。網路上常見的示範金鑰 JBSWY3DPEHPK3PXP 只有 80 位元,千萬不要用在真實帳號上。
- 把真實帳號的兩步驟驗證金鑰貼在這裡安全嗎?
- 計算在頁面內完成,不會傳送也不會儲存;但要清楚,金鑰就是整個第二因素,拿到它的人可以永久產生有效的驗證碼。在公用電腦上貼過的金鑰應視為已外洩,有疑慮就重新綁定。QR Code 也一樣,它以明文包含了金鑰,別截圖傳到群組裡。
- otpauth:// 連結裡有哪些內容?
- 格式來自 Google Authenticator 的 Key URI 文件:otpauth://totp/發行者:帳號?secret=BASE32&issuer=發行者,另可加上 algorithm、digits、period 參數。發行者刻意寫兩次——標籤裡的給舊版 App 看,參數裡的給新版 App 看——這樣兩類 App 都能顯示正確的名稱。
背後的開源專案
本工具執行在 hectorm/otpauth 之上,以 MIT 授權發布。如果你需要在自己的程式裡實作同樣的能力,直接用這個函式庫。
hectorm/otpauth也常被稱作
- totp 線上產生
- google authenticator 驗證碼
- 兩步驟驗證碼產生
- otpauth 連結
- 2fa 驗證碼
- 動態密碼