2FA 코드 생성기 (TOTP)

Base32 시크릿 키나 otpauth:// URI로 2FA 인증 코드(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·2FA 완전 가이드: 시간 기반 일회용 비밀번호의 원리와 구현
예시·자세한 설명·자주 묻는 질문 실제 출력이 있는 예시, 다른 도구와의 차이, 자주 묻는 질문.

계산 방식은 RFC 6238의 TOTP로, T = floor(Unix 시각 / 주기)에 RFC 4226의 HOTP를 적용합니다.

대학 포털의 구글 OTP 등록을 예로

국내에서는 Google Authenticator를 흔히 「구글 OTP」라고 부르며, Google 고객센터 한국어 문서 제목도 「Google OTP로 인증 코드 받기」입니다. 대학 포털처럼 이 앱으로 2단계 인증을 요구하는 곳이 많습니다. 한국체육대학교의 「포털 2단계 인증(구글 OTP) 등록 가이드」(2025.7)는 휴대폰으로 QR 코드를 스캔하는 방법 외에, PC에서 크롬 확장 프로그램 「인증 도구」에 「수동입력」으로 OTP 키를 붙여 넣고 발급자에 portal을 적는 방법을 안내합니다. 같은 문서에 「OTP번호는 30초마다 변경됨」, 「한 번 등록을 마친 QR코드는 다시 다른 기기에 등록할 수 없습니다」라는 설명도 있습니다.

키를 직접 옮겨 적는 방식에서는 한 글자만 틀려도 앱이 6자리 숫자를 계속 보여 주지만 서버는 받아 주지 않습니다. 같은 키를 이 도구에 붙여 넣고, 같은 30초 안에 숫자를 비교해 보세요.

  • 숫자가 다르면: 앱에 넣은 키가 잘못되었습니다. 키에 0, 1, 8, 9가 있으면 도구가 그 문자를 알려 줍니다. Base32에는 이 네 숫자가 없으므로 O, I, B를 잘못 읽었을 가능성이 큽니다.
  • 숫자가 같은데 거부되면: 시계를 확인하세요. RFC 6238 5.2절은 검증 쪽이 네트워크 지연으로 허용하는 폭을 최대 1단계로 두도록 권장합니다. 기기 시계와 서버 시각이 약 3초 이상 차이 나면 이 도구가 경고합니다.

발급자 portal, 계정 20261234로 URI를 만들면 otpauth://totp/portal:20261234?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ&issuer=portal이 됩니다. Google의 Key Uri Format에 따라 기본값(SHA1, 6자리, 30초)은 생략하고, 발급자나 계정에 :가 있으면 구분자와 헷갈리므로 오류로 처리합니다.

RFC 테스트 벡터로 확인한 예시

RFC가 공개한 테스트 키이므로 다른 구현에서도 같은 결과가 나와야 합니다.

키(Base32)설정Unix 시각이전현재다음
64바이트 시드(끝에 =)SHA-512, 8자리1234567890191529049344111693638120
GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQSHA-1, 6자리, 주기 60초2000000000021152864010718332
같은 키SHA-1, 6자리, 주기 30초2000000000279037

첫 줄의 93441116은 RFC 6238 부록 B 표의 1234567890초 SHA-512 값입니다. 64바이트 시드는 GEZDGNBVGY3TQOJQ를 6번 반복하고 GEZDGNA=를 붙인 문자열입니다. RFC 본문은 20바이트 시드만 언급하지만, 부록 A의 참조 코드는 SHA-256·SHA-512에 32·64바이트 시드를 쓰며 표의 값도 이 시드에서 나옵니다. 둘째·셋째 줄은 같은 키와 시각이라도 주기에 따라 T가 33333333과 66666666으로 달라져 코드가 바뀐다는 것을 보여 줍니다. 30초일 때의 279037은 RFC 표의 8자리 값 69279037의 뒤 6자리입니다.

다른 2FA 코드 생성 사이트와의 차이

2026-09-30에 「2FA 코드 생성」 검색 결과에 나오는 도구를 같은 입력으로 시험했습니다.

  • 키가 남는 곳. 2FA Pro는 코드를 만들면 저장 버튼을 누르지 않아도 브라우저 localStorage의 2fa_pro_history에 키 전체(fullSecret)를 기록했습니다. BrowserScan은 키를 주소창의 # 뒤에 적어 방문 기록에 남깁니다. 이 도구의 키는 페이지 메모리에만 있고, 보내는 요청은 키가 없는 시각 확인용 HEAD뿐입니다.
  • 잘못된 문자. GEZDGNBV1Y3TQOJQ(1 포함)를 넣으면 2FA Pro는 「Secret key too short.」라고 표시했고, BrowserScan은 코드를 보여 주었습니다(빨간 글씨 「키 문자가 불법입니다. 키를 확인하세요.」는 올바른 RFC 키에서도 떠 있었습니다). 이 도구는 문제가 되는 문자를 짚어 줍니다.
  • otpauth:// 붙여 넣기. BrowserScan은 URI를 넣으면 코드를 내지 않았습니다. 이 도구는 URI의 설정을 모두 채웁니다.
  • 설정. SHA-1·SHA-256·SHA-512, 6·8자리, 1~86400초의 임의 주기, 고정 Unix 시각을 쓸 수 있습니다. 2FA Pro는 주기가 30·60초이고 7자리와 HOTP를 지원합니다.

제한 사항

  • 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, 쿠키, URL 어디에도 쓰지 않으며, 이 페이지는 분석·광고 스크립트도 불러오지 않습니다. 새로고침하면 키가 사라집니다. 도구가 보내는 요청은 시계 확인을 위해 서버의 Date 헤더를 읽는 이 페이지에 대한 HEAD 요청 1번뿐이며, 쿼리 문자열도 본문도 없습니다.

Google OTP 앱이나 서버와 코드가 다르면 어떻게 확인하나요?

기기 시계(약 3초 이상 차이 나면 경고가 뜹니다), 키(한 글자 오타, 등록 화면을 다시 열어 바뀐 키), 설정(알고리즘·자릿수·주기는 양쪽이 같아야 함) 순서로 확인하세요. 현재 코드 아래의 이전·다음 코드를 보면 상대가 한 단계 어긋났는지 알 수 있습니다.

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비트를 요구하며, 더 짧은 키도 계산은 되지만 경고를 표시합니다.

평소 쓰는 인증 앱 대신 써도 되나요?

권하지 않습니다. 아무것도 저장하지 않아 탭을 닫으면 코드도 사라지고, 키를 가진 사람은 누구나 같은 코드를 만들 수 있습니다. 실제 계정의 키는 인증 앱이나 비밀번호 관리자에 두세요. 이 페이지는 2FA 구현 테스트, 직접 입력한 키 확인, 특정 시각의 코드 확인에 적합합니다.