2段階認証コード生成ツール(TOTP)

Base32 のシークレットキーや otpauth:// URI から 2段階認証コード(RFC 6238 の TOTP)を生成。RFC のテストベクトルで検証済み。キーは保存せず URL にも入れません。

  • ブラウザ内で処理
  • データはブラウザ外に出ません
  • 無料 · 登録不要
Base32 のキーか otpauth://totp/ URI 全体を貼り付けます。小文字、空白、ハイフン、全角文字、末尾の = パディングを読み取ります。URI の設定を各欄に反映し、この欄にはキーだけを残します。HOTP URI は非対応です。
crypto.getRandomValues で新しいキーを作ります。SHA-1 は 20 バイト、SHA-256 は 32 バイト、SHA-512 は 64 バイトです。入力欄のキーを置き換えますが、サービスのアカウントは作成・更新しません。
コード設定
コード設定 アルゴリズム、桁数、周期をサービス側と合わせてください。既定値は SHA-1、6 桁、30 秒です。周期は 1〜86400 の整数秒です。変更するとコードを自動で再計算します。
Unix 時刻が空なら端末の現在時刻を使います。0 以上の整数秒を入力すると時刻が固定され、カウントダウンが止まります。T は floor(Unix 時刻 / 周期) を示します。
認証アプリの登録情報
認証アプリの登録情報 発行者とアカウントは認証アプリの登録名です。どちらも省略でき、アカウントが空なら Account を使います。コロンは使えません。名前は URI と QR コードに反映され、認証コードはキーとコード設定で決まります。

現在のコードと認証アプリ用 QR コードがここに表示されます。

詳しいガイドを読む TOTPとは?RFC 6238 のワンタイムパスワードを計算例で理解する
例・詳しい説明・よくある質問 実際の出力つきの例、ほかのツールとの違い、よくある質問。

計算は RFC 6238(TOTP)のとおりで、T = floor(Unix 時刻 / 周期) に RFC 4226 の HOTP を適用します。

QR コードを読めずにキーを手入力したとき

GMO コインのサポート記事「2段階認証方法の変更<SMS→アプリ>」では、QR コードをスキャンできない場合は「QRコードをスキャンできない場合」を選んでキーを表示し、アプリの[提供されたキーを入力]から入力する手順になっています。同じ記事にあるとおり、アプリの名前は iPhone では「Google Authenticator」、Android では「Google認証システム」です。

手入力で 1 文字でも違うと、アプリは 6 桁の数字を出し続けますが、サーバーは一度も受け付けません。画面のキーをこのツールにも貼り、同じ 30 秒の間にアプリと数字を比べてください。

  • 数字が違う:アプリ側のキーが間違っています。キーに 0・1・8・9 が入っていればこのツールがその文字を示します。Base32 はこの 4 つの数字を使わないので、O・I・B の読み違いが疑われます。
  • 数字は同じなのに拒否される:時計を確認します。RFC 6238 の 5.2 節は、検証側が通信遅延として認める幅を最大 1 ステップにするよう推奨しています。端末の時計とサーバーの時刻が約 3 秒以上ずれていると、このツールが警告を出します。

全角で入力されたキー(GEZD GNBV …)も半角に直して扱うので、メモ帳などからそのまま貼って構いません。

実例:RFC のテストベクトルで確かめる

RFC が公開しているテスト用キーなので、ほかの実装でも同じ結果になるはずです。

キー(Base32)設定Unix 時刻前現在次
GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQSHA-1・8 桁1111111109897310290708180414050471
同上SHA-1・6 桁1111111109731029081804050471
32 バイトの種(末尾 ====)SHA-256・8 桁20000000000989551297773770659879174

1 行目の 07081804 と「次」の 14050471 は、RFC 6238 付録 B の 1111111109 秒と 1111111111 秒の SHA-1 の値です(2 つの時刻は隣り合うステップに入ります)。先頭の 0 も残します。3 行目の 20000000000 秒は 2603 年で、T は 666666666 です。32 バイトの種は GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZA==== で、RFC の本文は 20 バイトの種しか挙げていませんが、付録 A の参照コードは SHA-256・SHA-512 に 32・64 バイトの種を使っており、表の値もそれに対応しています。

発行者に「社内ポータル」、アカウントに yamada を入れると、URI は otpauth://totp/%E7%A4%BE%E5%86%85%E3%83%9D%E3%83%BC%E3%82%BF%E3%83%AB:yamada?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ&issuer=%E7%A4%BE%E5%86%85… になります。日本語は UTF-8 でパーセントエンコードし、Google の Key Uri Format に従って既定値(SHA1・6 桁・30 秒)は省きます。発行者やアカウントに半角の「:」があると区切り文字と区別できないため、エラーにします。

他の 2FA コード生成サイトとの違い

2026-09-30 に、「2段階認証 コード 生成」の検索結果に出るツールを同じ入力で試しました。

  • キーの送り先。 2fa.f5.si(「X (Twitter)用ツール」)は、ボタンを押すと https://api.choko.cc/otp?code=<キー> にリクエストを送り、別ドメインのサーバーがコードを返します。BrowserScan はキーをアドレスバーの # 以降に書き込むため、閲覧履歴に残ります。このツールのキーはページのメモリにだけあり、送るのはキーを含まない時刻確認の HEAD だけです。
  • 不正な文字。 GEZDGNBV1Y3TQOJQ(1 を含む)に対し、BrowserScan はコードを表示しました(赤字の「キー文字が不正です。キーを確認してください」は正しい RFC のキーでも出ていました)。2fa.f5.si は「2FAコードの取得に失敗しました。」とだけ表示します。このツールはどの文字が原因かを示します。
  • otpauth:// の貼り付け。 BrowserScan は URI を貼るとコードを出しませんでした。このツールは URI の設定をすべて読み込みます。
  • 設定。 SHA-1・SHA-256・SHA-512、6 桁・8 桁、1〜86400 秒の任意の周期、固定の Unix 時刻を選べます。

制限事項

  • TOTP 専用です。otpauth://hotp/ は受け付けず、カウンターモードはありません。
  • 桁数は Key Uri Format の値である 6 と 8 のみ。周期は 1〜86400 の整数秒で、起点は Unix エポック(T0 = 0)です。
  • Key Uri Format の文書によると、Google Authenticator は algorithm と period を無視し、Android 版は digits も無視します。これらを変えると QR コードの下に注意書きが出ます。
  • QR コードの画像は読めません。QRコード読み取りで otpauth:// の文字列を取り出してから貼ってください。ほかの文字列を QR コードにするには QRコード作成を使います。
  • 何も保存しません。再読み込みでキーは消えます(意図した動作です)。
  • 時計チェックはサーバーの Date ヘッダー(1 秒単位)を使うため、約 3 秒以内のずれは表示しません。リクエストに失敗したときも何も表示しません。

HMAC の計算だけを確かめたいときは HMAC ジェネレーター、アカウントのパスワードにはパスワードジェネレーターが使えます。

FAQ

シークレットキーは送信・保存されますか?

されません。コードはブラウザの Web Crypto API で端末内で計算します。キーは localStorage・sessionStorage・Cookie・URL のどこにも書き込まず、このページはアクセス解析と広告のスクリプトも読み込みません。再読み込みするとキーは消えます。ツールが送るリクエストは、時計チェックのためにサーバーの Date ヘッダーを読む、このページへの HEAD リクエスト 1 回だけで、クエリ文字列も本文も付けません。

アプリやサーバーとコードが一致しないときは?

端末の時計(約 3 秒以上ずれていると表示します)、キー(1 文字の読み違い、設定画面を開き直したことによるキーの変更)、設定(アルゴリズム・桁数・周期は両側で同じにする必要があります)の順に確認してください。現在のコードの下にある前後のコードを見ると、相手側が 1 ステップずれているかどうかが分かります。

QR コードの otpauth:// リンクをそのまま貼れますか?

貼れます。otpauth://totp/ の URI をまるごとシークレット欄に貼ると、キー・発行者・アカウント・アルゴリズム・桁数・周期を読み込み、入力欄にはキーだけを残します。otpauth://hotp/(カウンター方式)は時刻ベースではないため受け付けません。QR コードの画像から URI を取り出すには、先に QR コードデコーダーを使ってください。

ランダム生成のキーの長さは?

SHA-1 は 20 バイト(160 ビット)、SHA-256 は 32 バイト、SHA-512 は 64 バイトです。RFC 6238 の 5.1 節が推奨する、HMAC の出力と同じ長さです。RFC 4226 は 128 ビット以上を必須としており、それより短いキーでも計算はできますが警告を表示します。

普段使いの認証アプリの代わりにできますか?

おすすめしません。何も保存しないのでタブを閉じればコードは消え、キーを持つ人なら誰でも同じコードを作れます。本番アカウントのキーは認証アプリかパスワードマネージャーに保管してください。このページは 2段階認証の実装テスト、手入力したキーの確認、特定の時刻のコードの確認に向いています。