Skip to content

DES / 3DES 암호화·복호화 도구

브라우저에서 DES·3DES(2/3키)·ECB/CBC·PKCS#7 암호화·복호화. 키 길이(8/16/24바이트)를 엄격 검증하고 동등한 OpenSSL 명령을 제공합니다. 업로드 없음.

트래킹 없음 브라우저 실행 무료
암호화는 전적으로 브라우저에서 실행됩니다 — 입력한 키와 데이터는 이 기기를 떠나지 않습니다.

암호문
동등한 OpenSSL 명령
—

명령에 입력한 키가 포함됩니다.

FIPS 81의 DES 테스트 벡터

이 페이지가 실행하는 엔진이 빌드 시점에 계산했습니다 — 여러분의 DES 구현을 이 값으로 검증해 보세요.
키 (단일 DES) 0123456789abcdef
평문 4e6f772069732074
암호문 (ECB, 패딩 없음) 3fa40e8a984d4815
DES/3DES 엔진은 FIPS 81 벡터를 단언하며 OpenSSL 3(des-ede / des-ede3, 단일 DES는 K‖K‖K 등가로 검증)에 대해 ECB와 CBC 전역의 3,000개 이상 무작위 조합으로 교차 검증되었습니다; 동등한 OpenSSL 명령은 실제 셸에서 실행해 비교했습니다. 라이브러리 기본값은 실제 실행과 소스 읽기로 확인했습니다; alternatives 참조. — Go Tools Security Team · Sep 28, 2026

이 암호화 도구를 만드는 개발자들이 직접 집필하고 검수합니다. 이 페이지의 모든 암호문과 바이트 수는 도구 엔진이 계산하고 테스트가 단언합니다.

DES 빠른 답변

DES 키 길이

8 / 16 / 24 바이트 단일 DES: 8바이트(유효 56비트). 3DES: 16바이트(2-key) 또는 24바이트(3-key). 공칭 키 소재 112/168비트, NIST 유효 보안 강도 약 80/112비트(SP 800-57). 이 도구는 바이트 수로 자동 판별하며 다른 길이는 예외를 던집니다.

FIPS 81 테스트 벡터

3fa40e8a984d4815 키 0123456789abcdef, 평문 "Now is t" (hex 4e6f772069732074): 패딩 없는 단일 DES ECB가 3fa40e8a984d4815를 출력합니다.

DES IV 길이

8바이트 8바이트(16자리 hex), CBC 전용 — ECB는 사용하지 않습니다. AES의 16바이트 IV와 다릅니다.

Java의 PKCS5Padding이란

= PKCS#7 DES에서는 PKCS#7입니다 — 역사적 이름 아래 같은 패딩 알고리즘입니다(PKCS#5는 8바이트 블록만 정의했고 하필 DES의 블록입니다).

오늘날 DES는 안전한가

레거시 상호운용 전용 아니요. 단일 DES는 2005년 철회; 3DES는 SP 800-131A Rev.2(2023)에서 폐기 예정. 레거시 상호운용 전용 — 새로운 것에는 AES-256을 사용하세요.

DES와 3DES(Data Encryption Standard)란?

DES(Data Encryption Standard)는 미국 표준 기관이 1977년 채택한 대칭 블록 암호입니다. IBM의 Lucifer 설계를 기반으로 합니다. 공칭 64비트 키(유효 56비트) 아래에서 64비트(8바이트) 블록을 페이스텔 구조의 16라운드로 처리합니다.

3DES(TDEA, Triple DES)는 짧은 키를 보강하기 위해 DES를 세 번 연결합니다: C = E_K3(D_K2(E_K1(P))). 가운데 단계가 복호화이므로 K1=K2=K3이면 체인이 단일 DES로 붕괴합니다 — 의도된 호환성 선택입니다. 2-key 형태(K3=K1)는 유효 약 112비트로 레거시 은행 시스템에서 가장 흔한 형태입니다.

NIST는 2005년에 단일 DES를 철회했고(FIPS 46-3 통지), SP 800-131A Rev.2(2023)에서 3DES를 폐기 예정으로 분류했습니다. 이들이 아직 존재하는 유일한 이유는 레거시 상호운용입니다: 은행 결제망, 게이트웨이, 90년대/2000년대 Java/.NET/PHP 시스템은 아직도 DES 시대의 암호를 돌립니다. 새로운 설계에는 AES-256을 사용해야 합니다.

# OpenSSL single DES (legacy provider)
openssl enc -des-ecb -provider legacy -provider default -K 0123456789abcdef -nopad

# 3-key 3DES CBC + PKCS#7 (default provider)
openssl enc -des-ede3-cbc -K <48 hex digits> -iv <16 hex digits> -base64 -A

이 DES 도구가 하는 일

세 가지 키 길이 모두 엄격하게 검증

8/16/24바이트는 단일 DES / 2-key / 3-key 3DES로 자동 판별되며, 그 외는 예외를 던집니다. CryptoJS의 조용한 잘라내기나 openssl enc -K의 잘라내고 경고하기와 달리, 잘못된 키는 크게 실패합니다 — 상호운용 불일치의 최상위 원인입니다.

빌드 시점에 계산되는 FIPS 81 벡터

하단의 테스트 벡터 표는 빌드 시점에 동일한 엔진이 도출한 것이므로, 크롤러는 JS를 실행하지 않고도 기준값을 읽을 수 있고 인쇄된 값이 대화형 값과 어긋날 수 없습니다.

동등한 OpenSSL 명령

모든 파라미터 조합은 OpenSSL 3에서 결과를 재현하는 openssl enc 명령에 대응됩니다(단일 DES용 레거시 프로바이더 플래그 포함). 상대 측에 보내 파라미터 차이를 확정하세요.

GBK 평문 지원

중국어 Windows JDK의 DES 시대 Java getBytes()는 GBK를 내놓습니다. 이 도구는 양방향 모두 GBK를 받으므로 구형 시스템의 중국어 평문에 사전 변환이 필요 없습니다.

완전히 브라우저 안에서

순수 TypeScript, 의존성 0, 네트워크 요청 0. 키와 평문은 장치를 떠나지 않으며, 로드 후에는 오프라인으로도 동작합니다. 키를 다루는 도구로서 유일하게 수용 가능한 형태입니다.

언어별 DES 라이브러리 기본값

Java (JCE)

"DES"의 기본값은 ECB + PKCS5Padding

Cipher.getInstance("DES")는 DES/ECB/PKCS5Padding과 동일; "DESede"는 3DES지만 24바이트 키만 허용 — 2-key는 K1‖K2를 K1‖K2‖K1으로 확장하세요. PKCS5Padding은 DES에서 PKCS#7입니다. IV를 생략하면: 암호화는 무작위 IV를 고르고(getIV()로 꺼냄), 복호화는 "Parameters missing"을 던집니다.

PHP (openssl_encrypt)

des-ede3-cbc / des-ede-cbc

알고리즘 이름은 OpenSSL을 따릅니다: des-ede3는 트리플 ECB, des-ede3-cbc는 CBC. $options=0(기본값)은 Base64 텍스트를 출력; 원시 바이트는 OPENSSL_RAW_DATA. 짧은 키는 조용히 0으로 채워지고; 빈 IV는 경고한 뒤 영 IV로 암호화합니다.

OpenSSL 3 (openssl enc)

-des-ede3-cbc는 기본으로 동작

단일 DES에는 -provider legacy -provider default가 필요합니다(일부 빌드는 legacy가 아예 없음). -K/-iv는 hex를 받고, 기본은 PKCS#7, 끄려면 -nopad. -K는 지나치게 긴 키를 경고와 함께 잘라냅니다.

CryptoJS

잘못된 키 길이를 조용히 잘라냅니다

8바이트 원시 키(WordArray)는 동작; 잘못된 길이는 조용히 0으로 채워지거나 잘립니다 (4바이트는 채움, 10바이트는 잘림 — 오류 없음). 문자열 "키"는 키 유도를 실행합니다(MD5 + 무작위 솔트, Salted__ 접두어 출력, 매번 다름). IV 없는 CBC는 영 IV가 아니라 TypeError 충돌입니다. 8바이트 키의 TripleDES는 조용히 단일 DES가 됩니다.

.NET

TripleDES의 기본값은 CBC + PKCS7

TripleDESCryptoServiceProvider: Mode=CBC, Padding=PKCS7, Key는 16 또는 24바이트(DES는 8). .NET은 약한 키를 거부합니다(패리티를 먼저 정규화한 뒤 약한 키 표를 검사 — 영 키는 예외를 던짐) 반면 다른 모든 라이브러리는 받아들입니다. 마이그레이션할 때 주의하세요.

Go (crypto/des)

명시적 모드 연결

des.NewCipher는 8바이트 키의 원시 블록 인터페이스를 줍니다; cipher.NewCBCEncrypter 등은 직접 감싸야 합니다. 3DES는 des.NewTripleDESCipher(24바이트). IV 길이는 대부분의 언어보다 엄격하게 검사됩니다.

DES 암호화 예제

FIPS 81 테스트 벡터 (단일 DES, ECB, 패딩 없음)

키 0123456789abcdef, 평문 (hex) 4e6f772069732074
3fa40e8a984d4815

평문은 ASCII 문자열 "Now is t"입니다. 이것은 교과서적인 FIPS 81 벡터이며, 페이지 하단의 표는 빌드 시점에 동일한 엔진으로 계산됩니다 — DES 구현이 이 입력으로 이 값을 내지 않는다면 버그가 있는 것입니다.

2-key 3DES + CBC + PKCS#7: UTF-8 평문을 Base64로

키 0123456789abcdeffedcba9876543210 (16바이트), IV fedcba9876543210, 평문: DES interop test: order 20260927-0042
QmnMoewSecp7Z7cr/w3/4AjM9lpFo1swc4dfLNH5UkgCwU5n7WIdKA==

16바이트 키는 2-key 3DES로 처리됩니다(K1 = 앞 8바이트, K2 = 뒤 8바이트, K3 = K1 — EDE2 조합). 8바이트 블록 위의 PKCS#7은 Java가 DES에 대해 "PKCS5Padding"이라 부르는 것과 정확히 같습니다: 같은 스킴이고 블록 크기만 다릅니다.

3-key 3DES + CBC + PKCS#7

키 0123456789abcdef23456789abcdef010456789abcdef012 (24바이트), IV fedcba9876543210, 평문: hello des
DhDQX9sfxKOirZ8eyqT7Jg==

24바이트 키는 완전한 3-key EDE3입니다: C = E_K3(D_K2(E_K1(P))). 세 가지 키 길이 가운데 퇴화 등가가 없는 유일한 형태입니다 — 2-key와 K1=K2=K3는 모두 더 약한 암호로 붕괴됩니다.

이 DES 암호화·복호화 도구 사용법

  1. 1

    모드와 패딩 선택

    Java DES/ECB/PKCS5Padding은 ECB + PKCS#7, openssl enc -des-ede3-cbc는 CBC + PKCS#7을 고르세요. 구형 PHP mcrypt 코드는 대개 Zero 패딩을 씁니다.

  2. 2

    키 입력 (8/16/24바이트)

    바이트 수가 암호를 선택합니다: 8 = 단일 DES, 16 = 2-key 3DES, 24 = 3-key 3DES. Hex, Text 또는 Base64를 고르세요; 배지가 실제 바이트 수와 감지된 형태를 보여줍니다. 잘못된 길이는 예외를 던집니다 — 아무것도 잘려나가지 않습니다.

  3. 3

    CBC라면 8바이트 IV 입력

    ECB는 IV가 필요 없습니다. IV는 정확히 8바이트 — 16자리 hex로, AES의 32자리가 아닙니다. Random 버튼이 새 값을 만들어 줍니다.

  4. 4

    붙여넣고 실시간 결과 확인

    암호화: 텍스트(UTF-8/GBK) 또는 hex 입력. 복호화: Base64 또는 hex 암호문을 붙여넣기. 타이핑하는 대로 결과가 갱신되며, 한 번의 클릭으로 복사하고 Decrypt-this 버튼으로 왕복 검증을 할 수 있습니다.

  5. 5

    동등한 OpenSSL 명령을 상대 측으로 가져가기

    접을 수 있는 패널이 현재 결과를 재현하는 openssl enc 명령을 제공합니다(키 포함; 단일 DES 명령에는 -provider legacy -provider default가 붙습니다). 상호운용하는 상대에게 보내세요 — 어느 쪽 파라미터가 틀렸는지 가장 빨리 정리되는 방법입니다.

DES 복호화가 실패하는 이유

키 길이가 8/16/24가 아님

"32자리 hex DES 키"는 16바이트 — 단일 DES가 아니라 2-key 3DES입니다. 반대로 24바이트 키를 2-key만 지원하는 시스템에 넣어도 실패합니다.

✗ 오류
키 0123456789abcdeffedcba9876543210 (16바이트)를 단일 DES로 선택 → 오류 "키는 정확히 8바이트여야 합니다"
✓ 정상
같은 키를 16바이트(2-key 3DES)로 → 정상 복호화

PKCS5 vs PKCS7 이름 혼동

Java는 DES에 "PKCS5Padding"이라 쓰지만 PKCS#7 알고리즘을 실행합니다(PKCS#5는 8바이트 블록 패딩만 정의했고 그 8바이트가 DES의 블록이라 이름이 남았습니다). JCE 암호문에 None이나 Zero를 고르면 항상 실패합니다.

✗ 오류
JCE `DES/ECB/PKCS5Padding` 암호문을 "패딩 없음"으로 복호화 → 끝에 쓰레기 데이터 또는 bad-padding 오류
✓ 정상
PKCS#7 (Java PKCS5Padding) 선택 → 깨끗한 출력

AES IV 길이(16바이트) 복사

DES의 블록은 8바이트라 IV도 8바이트입니다. AES 코드에서 온 32자리 hex IV는 길이 검사를 실패하고, 8자리 IV는 0으로 채워져 잘못 읽힙니다.

✗ 오류
IV 00000000000000000000000000000000 (32자리 hex) → 오류 "IV는 8바이트여야 합니다"
✓ 정상
IV 0000000000000000 (16자리 hex) → 수용됨

CBC IV를 잘못 넣으면: 처음 8바이트 블록만 쓰레기

다중 블록 암호문을 잘못된 IV로 복호화해도 오류가 나지 않습니다 — 첫 8바이트 블록만 쓰레기이고 나머지는 정상 복호화됩니다(IV는 첫 블록에만 닿고, 패딩 검사는 마지막 블록에 있습니다). "앞 몇 글자만 깨지고 나머지는 정상"이면 키보다 IV를 먼저 확인하세요; 단일 블록 암호문은 대신 패딩이 깨져 bad decrypt를 던집니다.

✗ 오류
다중 블록 암호문 + 잘못된 IV → 처음 8바이트만 깨지고 나머지 정상 — "키가 틀렸다"고 오해
✓ 정상
IV만 바꾸기(키 그대로) → 첫 블록 복원, IV가 원인임을 확인

openssl enc -K는 긴 키를 조용히 잘라냅니다

-K는 필요한 바이트만 남기고 스크립트가 삼켜 버리는 한 줄 경고를 출력합니다. 상대가 "키는 이 48자리 hex다"라고 말하지만 실제로는 처음 16바이트로 암호화했다면, 전체 키로 복호화하는 것은 실패합니다.

✗ 오류
셸: `-K <49자리 hex>` → "hex string is too long, ignoring excess" 경고가 파이프라인에 묻힘
✓ 정상
이 도구의 동등 명령으로 올바른 길이의 `-K`를 생성한 뒤 상대와 키 바이트 비교

OpenSSL 3에서 단일 DES가 "unsupported"로 실패

OpenSSL 3의 기본 프로바이더에는 des-ecb/des-cbc가 없습니다; 옵션 없이 실행하면 digital envelope routines::unsupported를 던집니다. -provider legacy -provider default를 붙이거나, K‖K‖K(대수적으로 단일 DES)로 des-ede3를 쓰세요.

✗ 오류
openssl enc -des-ecb -K … → Error: unsupported
✓ 정상
openssl enc -des-ecb -provider legacy -provider default -K … (또는 des-ede3-ecb -K <K‖K‖K>)

온라인 DES 암호화가 필요할 때

레거시 시스템 메시지 암호 디버깅
은행 결제망, POS 게이트웨이 MAC 계산, 구형 ERP 인터페이스 암호화는 아직도 DES/3DES입니다. Java나 PHP 환경을 세우지 않고도 메시지와 키를 여기에 붙여넣어 "키가 맞는지, 어떤 모드, 어떤 패딩"을 확인하세요.
Java / PHP / .NET 레거시 코드 마이그레이션
Cipher.getInstance("DES/ECB/PKCS5Padding") 출력이나 openssl_encrypt(..., 'des-ede3-cbc', ...) 출력을 바꿔 끼우기 전에 이 도구와 바이트 단위로 비교하세요. 2-key/3-key 형태는 키 길이에서 감지되므로 맞힐 것이 없습니다.
보안 감사와 교육
ECB의 패턴 누출(같은 평문 블록 → 같은 암호문 블록)을 시연하고, 3DES 퇴화(K1=K2=K3 → 단일 DES)를 검증하며, FIPS 81 벡터를 확인하세요 — 모의해킹 보고서와 암호학 과제의 단골입니다.
문서용 예제 암호문 생성
사내 위키나 API 문서에 재현 가능한 예제가 필요할 때, 고정 키와 IV로 여기서 계산하세요 — 독자는 동등한 OpenSSL 명령으로 검증할 수 있고, 운영 데이터가 붙어 돌아다닐 일도 없습니다.

DES / 3DES와 블록 암호 모드 이해

블록과 키
DES는 64비트 블록을 16라운드 페이스텔로 처리하며, 각 라운드는 56비트 마스터 키에서 PC-1/PC-2 압축 순열과 스케줄된 회전으로 유도된 48비트 서브키를 씁니다. 여덟 개의 S-box가 유일한 비선형성의 원천이며, 그 설계 기준은 지금까지도 완전히 공개된 적이 없습니다.
3DES EDE 조합
C = E_K3(D_K2(E_K1(P))). 가운데 복호화가 있어 K1=K2=K3이면 단일 DES로 붕괴합니다 — 하위 호환성을 위한 설계입니다. 2-key 형태는 공칭 키 소재가 2×56=112비트이지만 NIST 유효 보안 강도는 약 80비트입니다(SP 800-57 Part 1); 3-key는 공칭 168비트에 유효 강도 112비트(권장되지 않음)입니다.
ECB와 CBC
ECB는 블록을 독립적으로 암호화합니다 — 같은 평문 블록이 같은 암호문 블록으로 이어지는 눈에 보이는 패턴 누출인데, 8바이트 블록은 이를 AES-ECB보다 더 심하게 만듭니다. CBC는 이전 암호문 블록(첫 블록은 IV)을 평문에 섞은 뒤 암호화하며, DES 시대 은행의 주류 선택이었습니다. 두 모드 모두 암호문은 8바이트의 배수입니다.
패딩: PKCS#7 / Zero / None
PKCS#7은 부족한 만큼 값 n인 바이트 n개를 덧붙이고(3바이트 부족 → 03 03 03) 블록이 가득 차면 블록 하나를 통째로 추가합니다 — 이것이 Java가 DES에 대해 "PKCS5Padding"이라 부르는 것입니다. Zero 패딩은 0x00으로 채우며 평문이 실제로 0x00으로 끝나면 손실이 있습니다. None은 정확히 8의 배수를 요구합니다.
OpenSSL 3의 legacy 프로바이더
OpenSSL 3는 단일 DES를 기본값으로 꺼져 있는 legacy 프로바이더로 옮겼습니다: CLI에는 -provider legacy -provider default가 필요하고, 일부 빌드(Node에 번들된 OpenSSL 포함)는 아예 빠져 있습니다. 3DES(des-ede/des-ede3)는 기본 프로바이더에 남아 있습니다. 이 도구의 순수 TS 엔진은 영향받지 않습니다.

DES 올바르게 사용하기 (레거시 상호운용)

새 시스템에는 어떤 형태로도 DES를 쓰지 마세요
단일 DES의 56비트는 무차별 대입이 가능하고, 64비트 블록은 Sweet32 생일 경계(CVE-2016-2183)를 안고 있으며, NIST는 키 번들 하나를 평문 ≈8 MB(2²⁰ 블록)로 제한합니다; 2-key는 Disallowed, 3-key 암호화는 2023년 이후 Disallowed입니다. 새로운 것에는 AES-256을 사용하세요. 이 도구는 레거시 시스템을 읽고 안전하게 마이그레이션하기 위해 존재합니다.
레거시 상호운용에서는 바이트 단위 일치가 먼저
구형 시스템을 다룰 때는 코드를 고치기 전에 구형 파라미터의 암호문을 여기서 바이트 단위로 재현하세요. 알고리즘을 교체하기 전에 키 길이, 모드, 패딩, IV 소스(고정 vs 무작위, 헤더 vs 대역 외)를 확인합니다.
레거시 시스템이라도 IV를 재사용하지 마세요
같은 키에서 CBC IV를 재사용하면 두 평문의 첫 블록 사이 관계가 노출됩니다. 레거시 프로토콜이 고정 IV를 요구한다면 마이그레이션 목록에 결함으로 기록하세요 — 관례로 물려받지 않습니다.
키를 소스 코드에 두지 마세요
DES 시대 시스템은 평문 소스나 설정에 키를 박아 넣는 일이 다반사입니다. 감사할 때는 보고서에서 "어떤 알고리즘" 옆에 "키가 어떻게 저장되었는지"를 나란히 두세요 — 대부분의 침해 사고에서 실제 구멍은 후자였습니다.

DES 암호화·복호화 FAQ

DES 복호화가 "bad decrypt" 또는 패딩 오류로 실패합니다 — 무엇을 확인해야 하나요?
복호화는 모든 파라미터가 암호화 측과 일치해야 합니다: 키 바이트, 키 길이(8/16/24), 모드(ECB/CBC), IV, 패딩, 그리고 암호문이 hex인지 Base64인지. 가장 흔한 두 함정은 키 길이 불일치(32자리 hex "DES 키"는 16바이트 — 단일 DES가 아니라 2-key 3DES입니다)와 패딩 이름 혼동(Java의 PKCS5Padding은 DES에서 PKCS#7과 동일합니다 — None을 고르지 마세요)입니다. 오른쪽의 접을 수 있는 패널이 현재 설정에 대한 동등한 OpenSSL 명령을 보여줍니다; 이 명령을 상대 측에 보내는 것이 불일치 지점을 찾는 가장 빠른 방법입니다.
DES 키는 얼마나 길고 3DES는요?
단일 DES: 공칭 64비트(8바이트, 유효 56비트 — 바이트마다 한 비트는 패리티 비트). 3DES는 두 가지 형태가 있습니다: 2-key(16바이트, K1‖K2이며 K3=K1)와 3-key(24바이트, K1‖K2‖K3)입니다. 공칭 키 소재는 각각 112/168비트이지만 NIST의 유효 보안 강도(SP 800-57 Part 1 Rev.5 표 2)는 약 80비트와 112비트에 불과하며, 3-key 형태 역시 사용이 권장되지 않습니다. 이 도구는 바이트 수로 형태를 판별하며 8/16/24가 아니면 예외를 던집니다 — CryptoJS와 openssl enc -K는 대신 조용히 잘라내거나 0으로 채우는데, 이것이 상호운용 실패의 1위 원인입니다.
IV란 무엇이고 DES에서 길이는 얼마인가요?
IV는 CBC가 첫 번째 블록에 섞어 넣는 8바이트 값입니다; ECB는 사용하지 않습니다. 정확히 8바이트(16자리 hex 또는 8개 ASCII 문자)여야 합니다. DES의 IV는 8바이트이고 AES는 16바이트라는 점에 유의하세요 — AES IV 길이를 그대로 가져오면 즉시 실패합니다. 같은 키로 IV를 재사용하지 마세요.
Java의 DES/ECB/PKCS5Padding은 이 도구에서 무엇에 해당하나요?
ECB 모드 + PKCS#7 패딩입니다. JCE에서 DES의 "PKCS5Padding"은 범용 PKCS#7 알고리즘을 실행합니다 — PKCS#5는 8바이트 블록에 대한 패딩만 정의했는데, 그 8바이트가 하필 DES의 블록입니다. Java Cipher.getInstance("DES/ECB/PKCS5Padding")의 출력은 여기서 ECB + PKCS#7과 8바이트 단일 DES 키로 복호화됩니다. ⚠️ Java의 3DES(DESede)는 24바이트 키만 허용합니다 — 2-key 형태는 K1‖K2를 K1‖K2‖K1으로 직접 확장해야 합니다.
PHP의 des-ede3 계열 알고리즘 이름은 어떻게 대응되나요?
PHP는 OpenSSL의 이름을 빌려 씁니다: des-ede3-cbc는 3-key 3DES + CBC, des-ede3-ecb는 3-key + ECB, des-ede-cbc는 2-key 형태입니다. 24바이트 키는 3-key를, 16바이트는 2-key를 선택합니다.
DES 키의 패리티 비트는 무엇인가요? 검사되나요?
각 키 바이트의 최하위 비트는 패리티 비트로 정의되어 있어, 실제 56비트 키는 64비트 안에 들어 있습니다. FIPS 46-3은 이를 검사할 것을 요구하지 않습니다 — OpenSSL, Java, 이 도구 모두 무시합니다; 어떤 8바이트든 동작하며 패리티 비트를 바꿔도 암호문은 변하지 않습니다. .NET만 예외입니다: 패리티를 먼저 정규화한 뒤 약한 키(weak-key) 표를 검사하므로, 영(0) 키와 다른 약한 키는 .NET에서 거부되는 반면 다른 모든 라이브러리는 정상적으로 암호화합니다 — Java/OpenSSL에서 .NET으로 테스트 키를 옮길 때만 발화하는 함정입니다.
3DES에서 K1 = K2이면 어떻게 되나요?
2-key 3DES에서는 K3가 항상 K1과 같습니다; K1 = K2까지 같으면 EDE 체인 전체가 단일 DES로 붕괴합니다: E_K(D_K(E_K(P))) = E_K(P). 24바이트 키의 세 8바이트 구성 요소가 모두 동일한 경우에도 마찬가지입니다. 이 도구는 여전히 암호화합니다(상호운용 우선)하지만 실제 강도는 3DES가 아니라 단일 DES 56비트입니다.
DES는 아직 안전한가요?
아니요 — 레거시 상호운용 전용입니다. NIST는 2005-05-19에 단일 DES를 철회했습니다(56비트 키는 무차별 대입이 가능; EFF의 Deep Crack은 1998년 56시간 만에, 다음 해에는 distributed.net과 함께 22시간 만에 달성). SP 800-131A Rev.2는 2-key TDEA 암호화를 Disallowed로, 3-key 암호화를 2023-12-31 이후 Disallowed로 분류합니다(복호화는 "Legacy use"로 남아 과거 데이터 읽기에만 허용); SP 800-67 자체도 2024-01-01에 철회되었습니다. 작은 64비트 블록은 Sweet32급 생일 경계(CVE-2016-2183)도 안고 있습니다 — NIST는 단일 키 번들에 대해 평문 2²⁰ 블록(≈8 MB)으로 제한합니다. 새로운 설계에는 AES-256을 사용하세요. 이 도구가 존재하는 이유는 은행 결제망, 결제 게이트웨이, 구형 Java/.NET 시스템이 아직도 DES 시대의 메시지를 다루기 때문입니다 — 고치는 일은 읽을 수 있는 것에서 시작됩니다.
3DES 결과가 Java/PHP와 다른 이유는?
적중률 순서로 확인하세요: ① 키 길이 — 상대의 "32자리 hex DES 키"는 16바이트(2-key 3DES)인데 당신은 단일 DES로 복호화했다; ② 모드 — Java의 맨 "DES"는 기본 ECB, OpenSSL의 모드 접미사 없는 이름 des-ede3/des-ede는 ECB(CBC의 별칭은 -des3); PHP의 openssl_encrypt는 알고리즘 이름을 명시해야 하며, 헷갈리는 지점은 기본 출력이 원시 바이트가 아니라 Base64 텍스트라는 것; ③ 패딩 — 구형 PHP mcrypt는 Zero 패딩을 자주 썼고 JCE는 PKCS#5/#7; ④ 인코딩 — hex vs Base64, 그리고 대소문자; ⑤ CryptoJS 비밀번호 함정 — "키"로 문자열을 넘기면 키 유도(MD5 + 무작위 솔트, 출력 앞에 Salted__, 매번 다름)가 돌아가는데 이것은 원시 키가 아니다 — "같은 코드인데 매번 결과가 다르다"의 최상위 원인. 이 도구에서는 각 요소를 바꿔가며 확인할 수 있고, 오른쪽의 동등 OpenSSL 명령을 상대 측에 보내 재현할 수 있습니다.
ECB인가 CBC인가 — 무엇을 써야 하나요?
통신하는 시스템이 요구하는 대로 — 레거시 상호운용에는 선택권이 없습니다. 그래도 고를 수 있다면 항상 무작위 IV와 함께 CBC: ECB는 같은 평문 블록을 같은 암호문 블록으로 만들고, DES의 작은 8바이트 블록은 AES-ECB보다도 패턴이 더 눈에 띄게 새어 나갑니다. DES 시대 은행 프로토콜은 둘 다 씁니다; 먼저 프로토콜 문서를 확인하세요.
오프라인에서 동작하나요? 데이터가 업로드되나요?
모든 계산은 브라우저에서 일어납니다(순수 TypeScript, 의존성 0, 네트워크 요청 0); 키와 평문은 장치를 떠나지 않습니다. 페이지가 로드되면 오프라인으로 전환해도 계속 작업할 수 있습니다. 키를 다루는 도구로서 유일하게 수용 가능한 형태입니다.
2-key 3DES와 3-key 중 레거시 시스템에는 어느 쪽이 더 흔한가요?
2-key(16바이트)가 더 흔합니다: 은행과 결제 업계는 호환성을 위해 16바이트 키 하드웨어를 배치했고, SP 800-67도 이 형태에 별도의 (더 이른) 폐기일을 두었습니다. 따라서 32자리 hex "3DES 키"는 십중팔구 2-key 형태입니다. 이 도구는 바이트 수로 형태를 자동 판별합니다.

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

보안 도구

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

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

보안 도구

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

Bcrypt 해시 생성 및 검증 도구

보안 도구

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

CRC 순환 중복 검사 계산기

보안 도구

16진수나 텍스트에서 CRC-8·CRC-16·CRC-32 변형 63개를 계산하는 온라인 도구. 맞지 않는 체크섬을 역조회 칸에 넣으면 MODBUS 등 어느 변형인지 알려 줍니다.

HMAC 생성기 및 서명 검증 도구

보안 도구

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

JWT 디코더 (JWT Decoder)

보안 도구

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