Skip to content

AES 복호화 도구 — OpenSSL·CryptoJS 호환

온라인 AES 복호화 — GCM/CBC/CTR, 암호 문구 또는 원시 키, OpenSSL·CryptoJS "U2FsdGVkX1" 형식 자동 인식. 브라우저에서만 실행되며 키는 유출되지 않습니다.

트래킹 없음 브라우저 실행 무료
모든 처리는 브라우저에서 실행됩니다 — 키와 데이터는 이 페이지를 벗어나지 않습니다.
권장
키 크기
키 유형
고급 옵션
평문
전용 암호화 페이지가 필요하신가요?
FIPS 197, NIST SP 800-38D, OWASP, W3C Web Crypto 명세를 기준으로 암호학적 정확성을 검토했습니다. — Go-Tools 보안팀 · Jul 16, 2026

AES 복호화는 어떻게 동작하는가

AES 복호화는 암호화의 정확한 역과정입니다: 데이터를 뒤섞었던 동일한 대칭 키가 암호의 라운드를 거꾸로 실행해 원본 바이트를 복원합니다. AES는 대칭 방식이므로 별도의 '복호화 키'는 존재하지 않습니다 — 암호화에 사용된 것과 동일한 키(또는 암호 문구), 모드, IV를 그대로 제공해야 합니다. 매개변수가 정확하면 평문은 바이트 단위로 원래 그대로 돌아오고, 하나라도 틀리면 오류나 깨진 결과를 얻게 됩니다.

올바르게 복호화하려면 네 가지가 암호화 당시와 정확히 일치해야 합니다: 키(또는 암호 문구와 그 키 유도 설정), 운영 모드(GCM, CBC, CTR), IV 또는 논스, 그리고 GCM의 경우 인증 태그입니다. 이 중 하나라도 어긋나면 결과는 명확한 오류(GCM 인증 실패, CBC 패딩 실패)이거나 조용한 깨진 데이터(CTR, 또는 잘못된 IV의 CBC)입니다. 이 도구는 솔트, IV, 태그가 암호문에 포함되어 있을 때 이를 대신 읽어 오고, 무언가 맞지 않을 때는 실패 원인을 진단해 줍니다.

암호문은 몇 가지 서로 다른 형태로 도착하며, 이 도구는 그중 세 가지를 이해합니다. 형식 1은 자기완결형 암호 문구 배치입니다: 16바이트 솔트, 그다음 IV, 그다음 암호문(GCM 모드에서는 끝에 GCM 태그가 붙음) — 암호 문구만으로 복호화할 수 있습니다. 형식 2는 원시 키 배치입니다: IV가 암호문 앞에 붙어 있거나, IV를 별도로 제공해야 하는 '단순' 암호문입니다. 형식 3은 openssl enc 명령과 CryptoJS가 생성하는 OpenSSL 배치입니다.

그 OpenSSL 형식은 눈으로 알아볼 가치가 있습니다. 8개의 ASCII 바이트 Salted__로 시작해 8바이트 솔트, 그다음 암호문이 이어지며, 전체를 Base64로 인코딩하면 앞부분 바이트는 항상 접두어 U2FsdGVkX1로 나타납니다. 그러니 건네받은 암호문이 U2FsdGVkX1로 시작한다면 거의 확실히 openssl enc나 CryptoJS의 AES.encrypt(text, passphrase) 호출로 생성된 것입니다. CryptoJS는 레거시 EVP_BytesToKey 함수로 MD5를 한 번만 실행해 키를 유도하는 반면, 최신 openssl은 PBKDF2를 사용합니다 — 그래서 이런 암호문을 복호화할 때는 올바른 키 유도 함수를 고르는 것이 관건입니다. 입력이 Base64이고 원시 바이트만 보고 싶다면 Base64 디코더가 보여 드립니다. 이런 형식의 암호문을 만들려면 AES 암호화 도구를 사용하세요.

// AES-256-GCM decrypt with a passphrase (PBKDF2-HMAC-SHA256, 600,000 iterations).
// Identical code runs in the browser and in Node.js 20+ via Web Crypto.
async function aesGcmDecrypt(base64, passphrase) {
  const enc = new TextEncoder();
  const packed = Uint8Array.from(atob(base64), (c) => c.charCodeAt(0));
  const salt = packed.slice(0, 16), iv = packed.slice(16, 28); // salt(16) | iv(12)
  const ct = packed.slice(28);                                 // ciphertext + tag
  const baseKey = await crypto.subtle.importKey(
    'raw', enc.encode(passphrase), 'PBKDF2', false, ['deriveKey']);
  const key = await crypto.subtle.deriveKey(
    { name: 'PBKDF2', salt, iterations: 600000, hash: 'SHA-256' },
    baseKey, { name: 'AES-GCM', length: 256 }, false, ['decrypt']);
  const plain = await crypto.subtle.decrypt(
    { name: 'AES-GCM', iv }, key, ct);        // throws if the tag fails
  return new TextDecoder().decode(plain);     // recovered plaintext
}

주요 기능

OpenSSL·CryptoJS 출력 자동 인식

U2FsdGVkX1로 시작하는 암호문을 붙여넣으면 도구가 Salted__ 형식을 인식하고 클릭 한 번으로 해당 복호화 흐름으로 전환할 수 있게 해주므로, 막다른 오류와 씨름할 일이 없습니다.

세 가지 키 유도 함수

openssl enc 형식의 모든 세대에 걸쳐 복호화할 수 있습니다: 사용자 지정 반복 횟수의 PBKDF2, SHA-256을 쓰는 EVP_BytesToKey, 또는 CryptoJS가 사용하는 레거시 단일 MD5입니다.

복호화 실패 원인을 설명

막연한 오류 대신 진단 결과를 제공합니다: 키 오류인지 IV 오류인지, GCM 인증 실패, CBC 패딩 오류, Base64 오염, 또는 'MD5 시대 암호문처럼 보이니 EVP-MD5를 시도해 보세요' 같은 안내입니다.

동등한 openssl 명령을 실시간으로 표시

명령줄에서 이 복호화를 그대로 재현하는 정확한 openssl enc -d 명령을 반복 횟수까지 포함해 보여주므로 브라우저 밖에서도 결과를 검증할 수 있습니다.

암호 문구 또는 원시 키, GCM/CBC/CTR 전체 지원

자기완결형 암호 문구 암호문, IV가 앞에 붙거나 별도로 제공되는 원시 키 암호문, 그리고 Web Crypto의 세 가지 모드를 모두 처리합니다.

100% 브라우저에서 실행

암호문과 키는 Web Crypto API로 로컬에서 처리되며 업로드되지 않습니다 — 네트워크 탭이나 오프라인 상태로 직접 확인할 수 있습니다.

AES 복호화 예시

자기완결형 암호 문구 암호문 복호화(GCM)

솔트(16) ‖ IV(12) ‖ 암호문 ‖ 태그(16), Base64 — 암호화 페이지에서 생성
The quick brown fox jumps over the lazy dog.

이것은 암호화 페이지 GCM 예시의 역과정입니다. 암호 문구 hunter2로 생성된 자기완결형 Base64 문자열을 가져와 여기에 붙여넣고, 모드는 GCM, 키 크기는 256, 키 유형은 암호 문구로 설정한 뒤 동일한 암호 문구 hunter2를 입력하면 원래 문장이 그대로 돌아옵니다. 솔트나 IV를 따로 입력할 필요는 없습니다 — 도구가 문자열 앞부분에서 16바이트 솔트와 12바이트 IV를 읽어들이고, PBKDF2-HMAC-SHA256(600,000회 반복)으로 키를 유도한 뒤, 텍스트를 반환하기 전에 뒤에 붙은 128비트 GCM 태그를 검증합니다. 암호화 페이지에서 예시 불러오기를 클릭하면 새 문자열을 생성할 수 있고, 그것을 여기서 복호화해 보세요.

실제 OpenSSL / PBKDF2 출력 복호화

U2FsdGVkX18AESIzRFVmd1PBwxIFQpF+VgIhTK0aDHQ=
Attack at dawn!

이것은 실제 openssl enc 출력입니다. 이를 붙여넣고 OpenSSL 모드로 전환한 뒤(모드 CBC, 키 유형 암호 문구), 암호 문구 correct-horse를 입력하고 PBKDF2 키 유도 함수를 선택한 다음 반복 횟수를 10,000으로 설정하세요 — 평문은 Attack at dawn!입니다. U2FsdGVkX1 접두어는 이것이 Salted__ 형식임을 도구에 알려주며, 8바이트 솔트는 Base64 안에서 그 헤더 바로 뒤에 위치합니다. 다음 명령줄로 정확히 동일한 복호화를 재현할 수 있습니다: echo 'U2FsdGVkX18AESIzRFVmd1PBwxIFQpF+VgIhTK0aDHQ=' | openssl enc -d -aes-256-cbc -pbkdf2 -iter 10000 -pass pass:correct-horse -base64 -A. 비슷한 암호문이 PBKDF2로 실패한다면 CryptoJS로 만들어졌을 가능성이 높습니다 — KDF를 EVP-MD5로 전환해 다시 시도하세요. OpenSSL 예시 불러오기를 클릭하면 이 값들이 자동으로 채워집니다.

AES 암호문 복호화 방법

  1. 1

    암호문 붙여넣기

    Base64나 Hex 암호문을 입력란에 넣으세요. U2FsdGVkX1로 시작하면 도구가 이를 OpenSSL/CryptoJS 형식으로 표시하고 올바른 모드로 전환할지 제안합니다.

  2. 2

    형식과 모드 설정

    이 도구가 만든 자기완결형 문자열이라면 암호 문구 모드와 일치하는 GCM/CBC/CTR을 유지하세요. OpenSSL/CryptoJS 출력이라면 전환 제안(CBC + 암호 문구)을 수락하세요. 원시 키 데이터라면 원시 키와 인코딩을 선택하고, IV가 앞에 붙어 있지 않다면 직접 입력하세요.

  3. 3

    키 유도 함수 선택

    OpenSSL 모드에서는 키가 유도된 방식에 맞춰 PBKDF2(및 반복 횟수), EVP-SHA256, EVP-MD5 중 하나를 선택하세요. EVP-MD5는 CryptoJS가 사용하는 방식입니다.

  4. 4

    암호 문구나 키 입력

    정확한 암호 문구를 입력하거나 정확한 원시 키를 16진수나 Base64로 붙여넣으세요. 모든 설정이 일치하는 즉시 오른쪽에 평문이 나타납니다.

  5. 5

    실패하면 진단 결과 확인

    복호화 중 오류가 나면 패널이 가능성 있는 원인 — 잘못된 IV, 잘못된 키, 패딩 오류, Base64 오염, KDF 불일치 — 을 알려주므로, 추측 대신 한 번에 하나씩 설정을 조정할 수 있습니다.

AES 복호화가 실패하는 이유와 해결법

GCM 인증 실패

태그가 검증되지 않으면 GCM은 평문 반환을 거부합니다. 원인은 잘못된 암호 문구나 키, 잘못된 모드, 잘못된 IV, 또는 변조·잘림된 암호문일 수 있으며 GCM은 어느 것인지 알려줄 수 없습니다. 데이터가 암호화된 방식과 하나하나 다시 대조해 보세요.

✗ 오류
mode: CBC        // but the data was encrypted with GCM
=> Authentication failed
✓ 정상
mode: GCM, same passphrase and key size as encryption
=> plaintext

CBC: 첫 블록이 깨지면 IV가 잘못된 것

CBC에서 IV는 첫 16바이트 블록에만 영향을 줍니다. 첫 블록은 깨졌는데 나머지는 정상으로 디코딩된다면 IV가 잘못된 것이고, 전부 깨졌다면 키가 잘못된 것입니다.

✗ 오류
iv: 00000000000000000000000000000000   (wrong IV)
=> first block corrupt, rest readable
✓ 정상
iv: (the exact IV used to encrypt)
=> Attack at dawn!

CBC / PKCS#7 패딩 오류

패딩 오류는 거의 항상 키가 잘못되었다는 뜻입니다. 암호문이 손상되었거나 잘렸거나, 애초에 PKCS#7 패딩이 아니었다는 의미일 수도 있습니다. 전체 암호문이 제대로 복사되었는지, 암호 문구와 KDF가 일치하는지 확인하세요.

✗ 오류
passphrase: hunter3   // one character off
=> padding error
✓ 정상
passphrase: hunter2   // exact
=> plaintext

Base64(또는 hex) 오염

암호문과 함께 붙여넣은 줄바꿈, 공백, 스마트 따옴표가 디코딩을 깨뜨립니다. 도구는 공백을 자동으로 제거하지만, 문자가 누락되거나 추가되면 여전히 실패합니다.

✗ 오류
“U2FsdGVkX1...”   (curly quotes and trailing junk copied in)
✓ 정상
U2FsdGVkX18AESIzRFVmd1PBwxIFQpF+VgIhTK0aDHQ=   (clean Base64)

U2FsdGVkX1이 감지되었지만 OpenSSL 모드가 꺼져 있음

입력이 U2FsdGVkX1로 시작한다면 OpenSSL/CryptoJS Salted__ 출력을 보고 있는 것이며, 일반 암호 문구 문자열로는 복호화되지 않습니다. 도구가 배너를 표시하니 OpenSSL 모드로 전환을 클릭하고 KDF를 선택하세요.

✗ 오류
OpenSSL compatible: off
input: U2FsdGVkX1...
=> cannot parse
✓ 정상
OpenSSL compatible: on, KDF chosen
=> plaintext

KDF 불일치(CryptoJS 함정)

PBKDF2나 SHA-256으로는 실패하지만 EVP-MD5로는 복호화되는 암호문은 CryptoJS나 openssl 1.0.2 이하 버전에서 생성된 것입니다. 명령줄에서는 -md md5가 필요합니다.

✗ 오류
KDF: PBKDF2       // CryptoJS ciphertext
=> padding error
✓ 정상
KDF: EVP-MD5      // matches CryptoJS
=> plaintext

AES 복호화로 할 수 있는 일

openssl enc 출력 복호화
터미널을 열지 않고도 openssl enc -aes-256-cbc가 생성한 Salted__ 데이터를 읽으세요: Base64를 붙여넣고 암호 문구를 입력한 뒤 KDF를 선택하면 평문을 얻습니다.
CryptoJS 암호문 복호화
CryptoJS의 AES.encrypt(text, passphrase)를 사용한 레거시 앱에서 데이터를 복구하세요. 대부분이 놓치는 단계인 단일 MD5 키 유도에 맞추려면 EVP-MD5를 선택하세요.
계속 실패하는 복호화 디버깅
본인 코드로 무언가를 복호화할 수 없을 때 여기에 붙여넣어, 진단 패널을 이용해 문제가 키인지 IV인지 모드인지 인코딩인지 KDF인지 좁혀보세요.
암호화 왕복 검증
AES 암호화 페이지나 본인 앱에서 나온 암호문이 원본 바이트 그대로 정확히 복호화되는지 확인하세요.
미확인 암호문 파악하기
형태만 보고 형식을 식별하세요 — U2FsdGVkX1 접두어이거나 IV처럼 보이는 고정 길이 접두어 — 키를 시도하기 전에 어떻게 만들어졌는지 먼저 파악하세요.

AES 복호화 내부 동작과 형식

GCM 복호화 — 인증됨
GCM은 암호문에 대해 128비트 태그를 다시 계산해 비교한 뒤에야 평문을 반환합니다. 일치하지 않으면 손상된 데이터를 유출하는 대신 예외를 던집니다. 앞에 붙은 96비트 IV를 사용합니다. GCM 실패는 키, 모드, IV, 암호문 중 무언가가 잘못되었다는 뜻입니다 — 암호 알고리즘은 어느 것인지 알려줄 수 없고, 인증이 실패했다는 것만 알려줍니다.
CBC 복호화 — 첫 블록과 패딩을 주의 깊게 볼 것
CBC에는 뚜렷이 다른 두 가지 실패 특징이 있습니다. 첫 16바이트 블록만 깨지고 나머지는 정상으로 보인다면 IV가 잘못된 것입니다. 모든 블록이 깨져 있다면 키가 잘못된 것입니다. PKCS#7 패딩 오류는 대개 키가 잘못되었거나 암호문이 손상되었거나 잘렸다는 뜻입니다. CBC에는 HMAC 같은 인증 구조와 달리 태그가 없으므로, 잘못된 키로도 그럴듯해 보이는 바이트가 나올 수 있습니다.
CTR 복호화 — 오류 시 조용함
CTR은 절대 예외를 던지지 않습니다: 잘못된 키는 그저 깨진 결과를 내놓을 뿐이며, 이는 대개 바이트를 텍스트로 디코딩할 때 'UTF-8이 아님' 오류로 드러납니다. 카운터/IV를 정확히 맞추세요. 무결성 검사가 없으므로, 별도로 인증하지 않은 CTR 출력은 항상 의심스럽게 다루세요.
암호문 배치(F1 / F2 / F3)
형식 1(암호 문구)은 솔트(16) 다음 IV, 다음 암호문 순서이며 GCM 모드에서는 끝에 16바이트 GCM 태그가 붙습니다. 형식 2(원시 키)는 IV 다음 암호문, 또는 IV를 별도로 제공하는 단순 암호문입니다. 형식 3(OpenSSL)은 ASCII 헤더 Salted__ 다음 8바이트 솔트, 다음 암호문입니다. 어떤 배치인지 알면 솔트와 IV가 어디에 있는지 도구에 알려줄 수 있고, 원시 키 자체는 CSPRNG에서 나와야 합니다 — 비밀 키 생성기를 참고하세요.
키 유도: 데이터를 암호화한 방식과 일치시키기
자기완결형 암호 문구 암호문의 경우 이 도구는 PBKDF2-HMAC-SHA256을 600,000회 반복해 사용합니다. OpenSSL/CryptoJS 암호문의 경우 사용된 KDF를 직접 선택해야 합니다: PBKDF2(openssl -pbkdf2 기본값은 10,000회 반복 — 정확한 횟수를 설정하세요), SHA-256을 쓰는 EVP_BytesToKey(-pbkdf2 없는 openssl 1.1 이상), 또는 MD5를 한 번만 실행하는 EVP_BytesToKey(CryptoJS와 openssl 1.0.2 이하)입니다. 고전적인 '복호화가 안 돼요' 문제는 CryptoJS나 구형 openssl 암호문을 SHA-256으로 시도하는 경우입니다 — EVP-MD5로 전환하면 해결됩니다.

AES 복호화 모범 사례

먼저 형식부터 파악할 것
설정을 건드리기 전에 암호문을 살펴보세요. U2FsdGVkX1 접두어는 OpenSSL/CryptoJS를 뜻하고, 이 도구가 만든 자기완결형 문자열은 암호 문구 형식이며, 단순한 데이터 덩어리라면 대개 원시 키와 별도의 IV가 필요합니다.
키 유도 함수를 정확히 맞출 것
OpenSSL/CryptoJS 암호문에서는 KDF가 암호 문구만큼이나 중요합니다. PBKDF2가 실패하면 EVP-MD5(CryptoJS, 구형 openssl)를 시도하세요. 알고리즘뿐 아니라 반복 횟수도 일치해야 합니다.
암호문을 깔끔하게 붙여넣을 것
복사하면서 딸려 온 줄바꿈이나 공백이 Base64를 깨뜨릴 수 있습니다. 이 도구는 공백을 자동으로 제거하지만, 그래도 디코딩이 실패한다면 스마트 따옴표, 누락된 문자, 잘린 복사본이 없는지 확인하세요. Base64 도구로 의심스러운 문자열을 점검할 수 있습니다.
잘못된 키 결과를 정직하게 다룰 것
CTR이나 CBC에서는 잘못된 키가 오류 대신 바이트를 내놓을 수 있습니다. 출력이 깨진 것처럼 보이거나 UTF-8 검사를 통과하지 못한다면 키나 IV가 잘못된 것입니다 — 부분적으로 맞아 보이는 출력을 신뢰하지 마세요.
비밀 암호문이나 키를 서버로 절대 보내지 말 것
브라우저에서 복호화하는 핵심은 아무것도 페이지를 벗어나지 않는다는 데 있습니다. 업로드하는 도구는 피하세요. 이 도구는 로컬에서 Web Crypto를 사용하며, 네트워크 탭이나 오프라인 상태로 이를 확인할 수 있습니다. AES-256은 강력합니다 — 'TOP SECRET' 등급에 CNSA 2.0으로 승인되었습니다 — 그러니 복호화가 안 된다면 문제는 매개변수에 있지 암호 알고리즘에 있지 않습니다.

AES 복호화 자주 묻는 질문

키 없이 AES를 복호화할 수 있나요?
아니요 — 그렇다고 말하는 사람은 경계하세요. AES에는 알려진 실용적 약점이 없으므로 키나 암호 문구 없이는 무차별 대입밖에 방법이 없고, 숫자를 보면 그마저도 가망이 없습니다: AES-256은 2^256개의 가능한 키를 가지며, 이 공간은 천문학적으로 빠른 속도로 추측하더라도 의미 있는 부분을 건드리려면 우주 나이보다 훨씬 긴 시간이 걸릴 만큼 거대합니다. AES에는 '비밀번호를 잊어버렸어요' 식의 복구 기능이 없으며, 임의의 AES 암호문을 대신 복호화해 주는 정당한 서비스도 없습니다. 키를 잃어버렸다면 데이터는 사라진 것이고, 키를 가지고 있다면 이 도구가 브라우저 안에서 복호화해 드립니다. 키가 있는데도 복호화가 실패한다면 원인은 거의 항상 잘못된 모드, IV, 키 유도 함수이지 암호 알고리즘이 깨진 것이 아닙니다.
openssl enc 출력은 어떻게 복호화하나요?
Base64 암호문(U2FsdGVkX1로 시작)을 붙여넣고 도구가 제안하는 OpenSSL 모드 전환을 수락하거나, 모드 CBC와 키 유형 암호 문구로 OpenSSL 호환 모드를 직접 켜세요. 암호 문구를 입력한 다음 openssl이 사용한 키 유도 함수를 선택하세요: 파일이 -pbkdf2로 만들어졌다면 PBKDF2(동일한 반복 횟수를 설정하세요 — 기본값은 10,000), -pbkdf2 없는 일반 OpenSSL 1.1 이상 파일이라면 EVP-SHA256입니다. 도구는 그것이 반영하는 정확한 openssl enc -d 명령을 보여줍니다. 예를 들어 echo 'U2FsdGVkX18AESIzRFVmd1PBwxIFQpF+VgIhTK0aDHQ=' | openssl enc -d -aes-256-cbc -pbkdf2 -iter 10000 -pass pass:correct-horse -base64 -A는 Attack at dawn!을 출력합니다.
암호문 앞의 U2FsdGVkX1은 무엇을 의미하나요?
이는 OpenSSL Salted__ 형식의 지문입니다. OpenSSL과 CryptoJS는 암호문 앞에 8개의 ASCII 바이트 Salted__와 8바이트 솔트를 붙이는데, 이를 Base64로 인코딩하면 앞부분 바이트는 항상 U2FsdGVkX1로 나타납니다. 이를 보면 두 가지를 알 수 있습니다: 이 데이터는 openssl enc 명령이나 CryptoJS의 AES.encrypt(text, passphrase) 호출로 생성되었고, 키는 암호 문구로부터 유도되었다는 것입니다 — 따라서 원시 키가 아니라 암호 문구와 올바른 키 유도 함수가 필요합니다. 붙여넣으면 이 도구가 형식을 자동으로 감지하고 해당 방식으로 전환할지 물어봅니다.
CryptoJS 암호문은 어떻게 복호화하나요?
CryptoJS의 AES.encrypt(text, passphrase)는 OpenSSL의 Salted__ 형식을 사용하지만, 키는 레거시 EVP_BytesToKey 함수가 MD5로 단 한 번만 반복해 유도합니다. 그러니 암호문을 붙여넣고 OpenSSL 모드로 전환한 뒤 EVP-MD5 키 유도 함수를 선택하세요 — 이것이 거의 모두가 놓치는 설정이며, CryptoJS 암호문을 PBKDF2나 SHA-256으로 시도했을 때 '복호화되지 않는' 것처럼 보이는 이유입니다. 동일한 암호 문구를 입력하면 평문이 나타납니다. 명령줄에서는 동등한 복호화에 -md md5가 필요합니다.
GCM과 CBC — 왜 제 암호문은 한쪽으로는 복호화되고 다른 쪽으로는 안 되나요?
모드는 데이터가 암호화된 방식과 일치해야 하며, 둘은 서로 바꿔 쓸 수 없습니다. GCM은 128비트 인증 태그를 포함하므로 잘못된 모드, 키, IV를 선택하면 복호화를 거부합니다(인증 실패). CBC에는 태그가 없으므로 잘못 선택하면 명확한 실패 대신 조용히 깨진 결과나 패딩 오류를 만들어 낼 수 있습니다. GCM 인증이 계속 실패한다면 데이터가 정말 GCM인지 확인하고, CBC에서 패딩 오류가 난다면 암호 문구와 키 유도 함수를 다시 확인하세요. 이 도구의 진단 패널은 막연한 오류 대신 가장 가능성 높은 원인을 알려줍니다.
여기서 복호화할 때 암호문이나 키가 업로드되나요?
아니요. 복호화는 전적으로 브라우저의 Web Crypto API(crypto.subtle)를 통해 로컬에서 실행됩니다 — 이는 브라우저가 HTTPS에 사용하는 것과 동일한, 감사된 엔진입니다. 암호문, 암호 문구, 키는 어디로도 전송되지 않습니다 — 네트워크 탭이 계속 비어 있는 것을 지켜보거나, 인터넷 연결을 끊고 오프라인으로 복호화해 볼 수 있습니다. 이런 로컬 전용 설계 덕분에 민감한 암호문을 여기 붙여넣는 것도 합리적이지만, 그래도 운영 환경의 비밀 정보는 어떤 온라인 도구에서도 다루지 않는 편이 좋습니다.
복호화할 때 암호 문구와 원시 키의 차이는 무엇인가요?
이는 비밀 정보를 어떻게 입력할지를 결정합니다. 데이터가 암호 문구로 암호화되었다면(U2FsdGVkX1 형식인 경우도 포함) 암호 문구를 선택하고, 도구가 일치하는 KDF와 솔트로 키를 유도하게 하세요. 정확히 128/192/256비트 키로 암호화되었다면 원시 키를 선택하고 그 바이트를 16진수나 Base64로 붙여넣으세요 — IV도 암호문 앞에 붙어 있거나 별도로 입력해야 할 수 있습니다. 암호 문구로 암호화된 데이터를 원시 키로 복호화하려 하거나 그 반대의 경우는 복호화가 실패하는 흔한 원인입니다. 두 형태 중 어느 쪽이든 암호문을 만들려면 AES 암호화 도구를 사용하세요.

AES 암호화 도구 — GCM, CBC, CTR 모드

보안 도구

무료 온라인 AES 암호화 도구 — AES-128/192/256, GCM/CBC/CTR, 암호 문구(PBKDF2) 또는 원시 키. 브라우저에서만 실행되고 서버 업로드는 없습니다.

Bcrypt 해시 생성 및 검증 도구

보안 도구

온라인으로 bcrypt 비밀번호 해시를 생성·검증하세요 — 조절 가능한 비용 인자, $2b$/$2a$/$2y$ 접두사 지원. 100% 브라우저에서 실행, 비밀번호는 업로드되지 않습니다.

HMAC 생성기 및 서명 검증 도구

보안 도구

무료 온라인 HMAC 생성·검증 도구. Text/Hex/Base64 키로 HMAC-SHA256/SHA1/SHA384/SHA512를 Hex/Base64/Base64URL로 출력. 100% 브라우저 실행, 키 유출 없음.

JWT 디코더 (JWT Decoder)

보안 도구

무료 JWT 디코더로 JWT 토큰을 온라인에서 즉시 디코딩. 헤더, 페이로드, 서명, 만료, 클레임 확인. 100% 브라우저 기반 — 토큰이 기기를 떠나지 않음. 가입·추적 없음.

JWT 인코더 (JWT Encoder)

보안 도구

무료 온라인 JWT 생성기·인코더. 헤더와 페이로드를 구성하고 HS256, RS256, ES256으로 즉시 서명. 100% 브라우저 기반 — 비밀 키와 개인 키가 기기를 떠나지 않음.

무료 JWT 비밀 키 생성기 — HS256/384/512

보안 도구

온라인으로 HS256/384/512용 강력한 RFC 준수 JWT 비밀 키를 생성하세요. 100% 브라우저 실행, 서버 전송 없음. base64url·base64·hex, .env 복사 지원.