TOTP / HOTP コード
エンコード処理はすべてブラウザ内で完結します。データは送信されません
⚠️ 実際に使用中のアカウントのシークレットは入力しないでください。 ここは確かにローカルで計算しリクエストも送りませんが、ページはネットワークから読み込まれており —— そして TOTP のシークレットは第二要素の秘密そのもので、入手した者は有効なコードを出し続けられます。このツールはサービスから渡されたシークレットが使えるかの確認と、自動テストを書くときの期待値生成のためのものです。 アルゴリズムは 2 つの固定手順です:まずカウンタを求める(TOTP は現在の Unix 時刻をステップで割る、HOTP は指定した整数を使う)、次に HMAC と動的切り出し —— HMAC の最後のバイトの下位 4 ビットを開始位置とし、4 バイト読んで 31 ビットにマスクし、6 桁に落とします。同じシークレット・同じ時刻なら結果は同じで、お使いの認証アプリと 1 桁まで一致するはずです。 ⚠️ ここは「いまこのシークレットが何を出すか」を計算するだけで、検証は行いません —— 検証は候補をサーバーに送る行為で、オンラインの操作です。また、前後のウィンドウをいくつ受け付けるかはサーバー次第で、ここに並ぶ隣接コードは許容され得る範囲にすぎません。
機能
- RFC 6238 / RFC 4226 に従って TOTP と HOTP を計算。両 RFC の公式テストベクタをすべて通過しています
- ⚠️ ページの最初の行が「使用中のシークレットを入力しないでください」という注意 —— TOTP のシークレットは第二要素の秘密そのものです
- アルゴリズムは SHA-1 / SHA-256 / SHA-512 から選択(大半のサービスは SHA-1 が既定)
- ステップと桁数を変更可能(既定は 30 秒・6 桁で、一般的なアプリと同じ)
- このウィンドウの残り秒数と現在のカウンタ値を表示
- 前後のウィンドウのコードを表示でき、端末の時計がどれだけずれているか確認できます
- HOTP モードではカウンタを直接指定でき、RFC のテストベクタとの照合に便利です
- シークレットは小文字・空白・ハイフン・末尾パディングを許容。0・1・8・9 を含む場合は推測せずエラーにします
使い方
- ⚠️ テスト用アカウントのシークレットを使い、常用のものは避けてください
- Base32 シークレットを貼り付けます
- アルゴリズム・ステップ・桁数を合わせます(多くのサービスは SHA-1 / 30 秒 / 6 桁)
- 表示された 6 桁が認証アプリと完全に一致するはずです
よくある質問
- 認証アプリと結果が違うのはなぜですか?
- 可能性の高い順に:時刻のずれ —— TOTP は双方の時計に完全に依存し、30 秒以上ずれると隣のウィンドウになります。「前後のウィンドウ」を有効にして、アプリに表示されているコードがそこにないか確認してください。パラメータの不一致 —— アルゴリズム(SHA-1 / 256 / 512)、ステップ(30 秒か 60 秒か)、桁数(6 か 8 か)のいずれかが違えば結果も変わります。シークレットの書き写し間違い —— シークレットは A–Z と 2–7 のみで、手書きでは 0 を O、1 を I と書きがちですが、本ツールは 0/1 が現れた時点でエラーにします。
- TOTP と HOTP の違いは何ですか?
- 違いはカウンタの出どころだけです。HOTP は双方が増やすカウンタを使い、1 回使うごとに 1 増えます —— しかしクライアントとサーバーの同期が一度崩れると二度と一致せず、ログインに失敗した押下もカウンタを消費します。TOTP は時刻をカウンタに使う(現在時刻 ÷ ステップ)ため、時計がおおよそ合っていれば状態を同期する必要がありません。代償は 30 秒という短いウィンドウと、正確な時計への強い依存です。
- シークレットとコード、漏れると困るのはどちらですか?
- シークレットです。 コードは 30 秒で失効し、ユーザー名とパスワードが揃わなければ意味がありません。一方シークレットは有効なコードを無限に生成できるもので、入手した者はいつでもログインでき、こちら側には何の異常も見えません。つまりシークレットの漏洩は第二要素が完全に無効化されたことを意味し、コードの漏洩はその 30 秒分に留まります。
- このツールでコードが正しいか検証できますか?
- できませんし、すべきでもありません。検証は候補をサーバーに送る行為で、サーバーを持たない静的サイトである当サイトは行いません。ここが答えるのは「いまこのシークレットが何を出すか」です —— ご自身の認証アプリと照合すれば十分で、一致していればシークレットとパラメータの両方が正しいと言えます。
関連ツール
Base64 変換
エンコードテキストを Base64 に変換し、Base64 からテキストへ戻します。日本語や中国語、emoji も UTF-8 として正しく処理。すべてブラウザ内で完結し、内容は送信しません。
URL エンコード
エンコード日本語や中国語、空白・記号を %XX にエスケープし、復元します。URL 全体とパラメータ値では方式が異なり、間違えるとリンクが開けません。ブラウザ内で処理します。
HTML 実体参照
エンコード< > & と引用符を HTML 実体参照に変換し、文字へ戻します。デコードは1回だけで、&lt; は山括弧ではなく < になります。すべてブラウザ内で処理します。
JWT デコードと検証
エンコードJWT を header・payload・signature に分け、秘密鍵で HS256/384/512 の署名を検証します。exp・nbf は読める日時に変換。すべてブラウザ内で処理します。
Unicode エスケープ
エンコード日本語や中国語、emoji などの非 ASCII 文字を \uXXXX・\xXX・&#xXXXX; のエスケープ表記に変換し、復元もできます。すべてブラウザ内で処理し、送信しません。
ファイル → Base64
エンコードファイルをドロップすると Base64 と src・url() にそのまま貼れる data URL が得られます。MIME・サイズ・エンコード後の長さも表示。送信はありません。