> totp | authenticator | generator <
根據 Base32 金鑰產生以時間為基礎(TOTP)與以計數器為基礎(HOTP)的一次性密碼。可用來測試 2FA 設定、排查與驗證器 App 的驗證碼差異、建立 otpauth:// URI,全程在瀏覽器本機完成。
金鑰不會離開你的瀏覽器。不過仍請避免在公用電腦上貼上真實的正式環境金鑰。
OTPAUTH URI
需要用於驗證器 App 的 QR Code?請將 URI 貼到 QR Code 產生器
附倒數計時的即時驗證碼
貼上 Base32 金鑰即可看到目前與下一個驗證碼,每個週期自動更新,並以進度條顯示剩餘有效時間。
SHA-1、SHA-256、SHA-512
可選 6、7 或 8 位及任意週期。HMAC 透過 Web Crypto API 計算,與 RFC 4226 和 RFC 6238 的測試向量一致。
otpauth URI 建立與匯入
為驗證器 App 建立 otpauth:// URI,或匯入既有 URI 自動填入所有欄位。不會上傳任何資料。
>> 技術說明
一次性密碼的運作原理:
HOTP(RFC 4226)計算 HMAC(金鑰, 計數器),並將結果截斷為 6–8 位數字。TOTP(RFC 6238)是計數器為 Unix 時間除以週期(通常 30 秒)的 HOTP,因此驗證碼每個週期變化一次,雙方不必通訊即可得到相同結果。共用金鑰通常以 Base32 文字或內含 otpauth:// URI 的 QR Code 交換。
範例:
RFC 6238 test vector (SHA-1) secret = GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ time = 59 -> counter = 59 / 30 = 1 code (8 digits) = 94287082
為什麼使用此 TOTP 產生器:
- >開發登入功能時測試與除錯雙重驗證
- >查明驗證器 App 與伺服器驗證碼不一致的原因
- >建立具有正確發行者、演算法、位數與週期的 otpauth:// URI
- >透過 Unix 時間輸入欄核對固定時間點的驗證碼
>> 常見問題
問:TOTP 是如何運作的?
答:App 與伺服器共用一把金鑰。雙方都用金鑰與目前的時間步(Unix 時間除以週期,預設 30 秒)計算 HMAC,並截斷為 6 位驗證碼。只要兩邊時鐘一致,得到的驗證碼就相同。
問:在這裡輸入金鑰安全嗎?
答:計算完全在瀏覽器內透過 Web Crypto API 完成,不會向任何伺服器傳送資料。但 TOTP 金鑰就是你帳號的鑰匙:請勿在共用或不受信任的電腦上貼上真實的正式環境金鑰,除錯時請使用測試帳號。
問:為什麼我的驗證碼與驗證器 App 不一致?
答:最常見的原因是時鐘不準(TOTP 需要誤差在幾秒以內的準確時間)、演算法/位數/週期不同,或金鑰抄寫有誤。請確認選擇了絕大多數服務使用的 SHA-1、6 位、30 秒。
問:TOTP 和 HOTP 有什麼差別?
答:HOTP 使用的計數器只在驗證碼被使用時才遞增,因此驗證碼在用掉之前一直有效。TOTP 的計數器來自時鐘,驗證碼每個週期自動失效。在面向一般使用者的 2FA 中,TOTP 常見得多。
問:什麼是 otpauth:// URI?
答:它是啟用 2FA 時所掃描 QR Code 內的文字,例如 otpauth://totp/Example:user@example.com?secret=...&issuer=Example,包含金鑰、發行者、帳號,以及可選的演算法、位數與週期。貼到匯入欄即可擷取金鑰。
問:驗證器 App 支援哪些設定?
答:Google Authenticator 等許多 App 會忽略演算法、位數與週期參數,一律使用 SHA-1、6 位、30 秒。除非確定 App 與伺服器支援其他設定,否則請使用這些預設值。
HOTP 計數器達到最大值時會怎樣?
計數器使用精確的無符號 64 位整數,範圍為 0–18446744073709551615。達到最大值時不顯示下一組碼,遞增按鈕停用,不會回繞。匯入 HOTP URI 必須有一個明確的十進位計數器,不接受小數、指數寫法或重複參數。