實用工具

TOTP 動態驗證碼產生器

由 Base32 金鑰或 otpauth:// 連結算出目前與下一組兩步驟驗證碼,也能替新帳號產生設定連結與 QR Code。

瀏覽器本機執行雜湊與加密1476
免費

輸入

0 B

結果

結果會顯示在這裡。

開發或排查兩步驟驗證登入時,常常需要看到伺服器此刻預期的驗證碼,又不想每次都拿出手機。貼上 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 驗證碼
  • 動態密碼