ZestCalc
Appearance
Language

텍스트 암호화 / 복호화

AES-256-GCM으로 브라우저에서 직접 텍스트를 암호화하거나 복호화하세요. 데이터는 기기를 벗어나지 않습니다.

텍스트 암호화 / 복호화

텍스트와 비밀번호를 입력한 뒤 '암호화' 또는 '복호화'를 누르세요.

OpenSSL 명령 참고(AES-256-CBC)

OpenSSL을 사용하면 명령줄에서도 텍스트를 암호화하고 복호화할 수 있습니다. 아래 명령은 AES-256-CBC와 PBKDF2 키 파생(반복 100,000회, SHA-256)을 사용합니다.

암호화할 때는 암호화할텍스트를 암호화할 텍스트로 바꾸고, 사용할비밀번호를 원하는 비밀번호로 바꾸세요. 복호화할 때는 암호문Base64를 암호화 명령의 Base64 출력값으로 바꾸면 됩니다.

암호화

printf '%s' '암호화할텍스트' | openssl enc -aes-256-cbc -pbkdf2 -iter 100000 -pass pass:'사용할비밀번호' -a

복호화

echo '암호문Base64' | openssl enc -d -aes-256-cbc -pbkdf2 -iter 100000 -pass pass:'사용할비밀번호' -a

결과가 다른 이유는 무엇인가요?

위 웹 도구는 AES-256-GCM(인증된 암호화)을 사용하지만, OpenSSL 명령은 AES-256-CBC를 사용합니다. 이는 openssl enc가 GCM 모드를 지원하지 않기 때문입니다. 두 알고리즘은 출력 형식이 완전히 다르므로 이 웹 도구로 OpenSSL 출력값을 복호화할 수 없고, 그 반대도 마찬가지입니다. 다만 두 방식 모두 동일한 PBKDF2 파라미터(SHA-256, 반복 100,000회)로 암호화 키를 파생합니다.

이 도구 사용 방법

보호하려는 텍스트를 "평문" 입력란에 입력하거나 붙여넣고, 강력한 비밀번호를 선택한 뒤 "암호화"를 누르세요. 그러면 복호화에 필요한 모든 정보가 하나로 묶인 Base64 문자열이 반환됩니다. 여기에는 솔트, IV, 인증 태그, 암호문이 모두 포함됩니다.

원래 내용으로 되돌리려면 "복호화" 모드로 전환한 다음 Base64 문자열을 붙여넣고, 같은 비밀번호를 입력한 뒤 "복호화"를 누르세요. 비밀번호가 맞고 데이터가 변조되지 않았다면 원래 평문이 즉시 표시됩니다.

AES-256-GCM은 얼마나 강력한가요?

비밀번호를 잃어버리지 않은 한, 그것 없이 평문을 복구하는 것은 매우 강력한 컴퓨터를 동원하더라도 극도로 어렵습니다. AES-256의 키 공간은 22562^{256} 이므로 무차별 대입 공격은 현재 기술은 물론 가까운 미래의 기술로도 사실상 불가능합니다. 여기에 PBKDF2 키 스트레칭(100 000회 반복)까지 더해지므로 단순한 비밀번호 추측 역시 현실적이지 않습니다.

다만 약한 비밀번호나 재사용된 비밀번호는 이런 장점을 크게 약화시킵니다. 항상 강력하고 고유한 패스프레이즈를 사용하세요.

대칭 암호화란 무엇인가요?

대칭 암호화는 암호화와 복호화에 같은 키(비밀번호에서 파생된 키)를 사용합니다. 공개키/개인키 쌍이 필요한 비대칭 암호화와 달리, 대칭 방식은 단순하고 빠르기 때문에 양쪽이 같은 비밀을 공유하는 상황에서 저장 데이터나 전송 중 데이터를 보호하는 데 적합합니다.

왜 AES-256-GCM을 사용하나요?

  • 인증된 암호화: GCM(Galois/Counter Mode)은 한 번의 작업으로 기밀성과 무결성을 모두 제공합니다. 암호문이 단 1비트만 바뀌어도 복호화는 인증 오류로 실패하며, 깨진 출력값을 내보내지 않습니다.
  • 널리 신뢰받음: AES-256은 전 세계 정부 기관, 금융 기관, 보안이 중요한 소프트웨어에서 사용하는 암호화 표준입니다.
  • 업계 표준: TLS 1.3의 기본 암호 스위트 중 하나이며, NIST 권고 대상이고, Web Crypto API를 통해 주요 플랫폼에서 기본 지원됩니다.

이 도구는 하나의 고정 알고리즘만 사용하므로, 암호화와 복호화 사이에서 알고리즘이 맞지 않을까 걱정할 필요가 없습니다.

암호화 / 복호화 과정은 어떻게 동작하나요?

  1. 키 파생(PBKDF2) — 비밀번호는 그대로 암호화 키로 사용되지 않습니다. 대신 무작위 16바이트 솔트와 함께 PBKDF2에 입력되고, SHA-256을 100 000회 반복 적용합니다. 그 결과로 생성되는 256비트 키는 비밀번호만으로 역추적하기가 계산적으로 매우 어렵습니다.
  1. 암호화 — 무작위 12바이트 IV(초기화 벡터)가 생성됩니다. 그런 다음 AES-256-GCM이 파생된 키와 IV를 사용해 평문을 암호화하며, 복호화 시 검증되는 16바이트 인증 태그와 암호문을 함께 만듭니다.
  1. 패킹 — 솔트, IV, 인증 태그, 암호문을 이 순서대로 이어 붙인 뒤 하나의 Base64 문자열로 인코딩합니다. 즉, 받는 사람은 비밀번호만 알면 되고 나머지 정보는 모두 출력값 안에 포함됩니다.
  1. 복호화 — Base64 문자열을 디코딩한 뒤 다시 솔트, IV, 태그, 암호문으로 분리합니다. PBKDF2가 비밀번호와 솔트로부터 같은 키를 다시 파생하고, AES-256-GCM이 데이터를 복호화합니다. 태그 검증에 실패하면 작업은 즉시 중단되며, 이를 통해 잘못된 비밀번호와 변조된 암호문을 모두 막을 수 있습니다.

개인정보 보호 안내

모든 처리는 전부 브라우저 안에서만 이루어집니다. 평문, 비밀번호, 암호문은 어떤 서버로도 전송되지 않습니다. 브라우저의 네트워크 검사기를 열어 보면 암호화나 복호화 중 외부로 나가는 요청이 전혀 없다는 것을 직접 확인할 수 있습니다.

참고로 결과 영역에는 같은 비밀번호와 반복 횟수로 AES-256-CBC 암호화를 수행하는 OpenSSL 명령도 표시됩니다. 이 명령은 로컬 명령줄 암호화를 시험해 볼 수 있도록 제공되는 예시이지만, 그 출력은 이 도구로는 복호화할 수 없고 반대도 마찬가지입니다. 두 출력이 호환되지 않는 이유는 두 가지입니다.

  1. 암호 모드가 다름 — 이 도구는 AES-256-GCM(인증된 암호화)을 사용합니다. openssl enc 도구는 GCM 모드를 지원하지 않기 때문에 명령은 AES-256-CBC로 대체되며, 이 방식에는 내장 인증 태그가 없습니다.
  1. 바이너리 형식이 다름 — 이 도구는 출력을 salt(16 bytes) + IV(12 bytes) + auth tag(16 bytes) + ciphertext 형식으로 묶어서 Base64로 인코딩합니다. 반면 OpenSSL은 자체 Salted__ 헤더 형식을 사용하며, 솔트는 8바이트이고 인증 태그도 없습니다.

이러한 차이 때문에 여기서 만든 암호문은 여기서만 복호화할 수 있고, 저 OpenSSL 명령으로 만든 암호문은 대응되는 openssl enc -d 명령으로만 복호화할 수 있습니다.