SM4 암호화 / 복호화

SM4로 암호화하거나 복호화하세요 — 중국 국가 표준 128비트 블록 암호 GB/T 32907-2016 — PKCS#7 패딩과 함께 ECB와 CBC 모드로. 출력은 openssl enc -sm4-ecb / -sm4-cbc와 바이트 단위로 호환됩니다. 모든 처리는 브라우저에서 이루어지며 아무것도 업로드되지 않습니다.
PKCS#7 패딩이 언제나 적용됩니다. OpenSSL enc와 정확히 같습니다.
입력 읽기:
출력 쓰기:
OpenSSL 교차 검증 — 여기서 암호화한 뒤 openssl enc -d -sm4-cbc -K <hex키> -iv <hex IV> -in file.sm4 -out file.txt(또는 -sm4-ecb에 -iv 없이)를 실행하세요. 이 페이지가 OpenSSL과 같은 PKCS#7 패딩을 적용하기에 바이트가 정확히 일치합니다.
자체 테스트
GB/T 32907-2016 부록 A.1 기지답 벡터, 독립 Python 참조 구현이 만든 6개 결정론적 ECB/CBC 교차 벡터, 네 개의 샘플 풀 전체, 그리고 부정 경로(잘못된 키 길이, 블록 배수가 아닌 암호문, 변조된 패딩은 거부되어야 함)를 재생합니다.
SM4란?
한 문장 요약: SM4는 중국 국가 표준 블록 암호입니다 — 128비트 블록, 128비트 키, 불균형 파이스텔 구조의 32라운드 암호로 GB/T 32907-2016(이전 GM/T 0002-2012)로 공표되었으며, NIST 세계에서 AES가 맡은 역할을 중국 "SM" 제품군에서 맡습니다.
한눈에 보는 SM4 vs AES
항목SM4AES
블록 크기128비트128비트
키 크기128비트만128 / 192 / 256비트
라운드3210 / 12 / 14
구조불균형 파이스텔 (라운드당 32비트 워드 하나 갱신)치환-순열 네트워크 (매 라운드 전체 상태)
S-박스8×8 박스 하나, 라운드당 4번 사용8×8 박스 하나, 라운드당 16번 + MixColumns
표준 모드ECB, CBC (이 페이지), TLS 스위트의 GCM/CTR (RFC 8998)ECB, CBC, CTR, GCM, ...
공표2012년 (GM/T 0002-2012, GB/T 32907-2016), ISO/IEC 18033-3에 포함2001년 (FIPS 197)

같은 임무, 다른 설계: 둘 다 공개 8×8 S-박스를 지닌 128비트 블록 암호이지만 SM4는 가벼운 파이스텔 32라운드를 돌리고 AES는 더 무거운 전체 상태 라운드를 10-14번 적용합니다. 소프트웨어에서는 하드웨어 명령(AES-NI) 덕에 AES가 보통 더 빠르며, SM4는 중국 플랫폼의 전용 CPU 확장으로 대등한 위치에 올랐습니다. 어느 쪽에도 실용적 공격은 없으며 128비트 키는 128비트 키입니다.

AES 대신 SM4를 쓰는 이유는?

준수와 상호운용이지 강도가 아닙니다. 중국 상용암호 규정(상용암호)은 인증 부문에 SM 제품군을 요구하며 TLCP와 RFC 8998 스위트를 쓰는 TLS 1.3 같은 프로토콜은 SM4를 협상합니다. 상대방이나 규제기관이나 하드웨어가 SM4만 말한다면 SM4를 쓰세요. 자유롭게 고를 수 있다면 이 사이트의 AES 페이지의 AES-256이 여전히 세계 기본값입니다.

흔한 실수
  • 구조적 데이터에 ECB. 같은 평문 블록이 같은 암호문 블록을 만듭니다 — 클래식한 펭귄 문제. 데이터가 한 블록보다 길면 언제나 (이 페이지 기본값인) CBC와 새 IV를 쓰세요.
  • 키는 정확히 16바이트. AES와 달리 SM4에는 192/256비트 변형이 없습니다. "password" 같은 패스프레이즈는 키가 아닙니다 — 먼저 KDF로 유도하세요(비밀번호 해시 생성기 참조).
  • 패딩이 선택이라고 가정. 이 페이지는 OpenSSL enc처럼 언제나 PKCS#7을 적용해 16바이트 평문이 32바이트로 암호화됩니다. 패딩 없는 날 SM4는 의도적으로 제공하지 않습니다.
  • CBC에서 IV 재사용. CBC에서 키+IV 쌍이 반복되면 메시지 접두사의 동일성이 샙니다. 메시지마다 무작위 IV를 만들어 암호문과 함께 보내세요.
FAQ

OpenSSL과 호환되나? 네 — 바이트 단위로. openssl enc -sm4-cbc -K 0011... -iv 4455... -in in.txt -out out.sm4(OpenSSL 1.1.1+)가 같은 키, IV, 입력에 대해 이 페이지가 인쇄하는 것과 정확히 같은 암호문을 만듭니다. GmSSL도 같습니다.

여기 SM4-GCM이 없는 이유는? 표준 인접 라이브러리 생태계는 SM4-GCM을 주로 TLS 스택 안에서 노출하며, 이 페이지가 맞추는 파일 지향 명령줄 관례(enc)는 ECB/CBC를 다룹니다. 인증형 SM4는 프로토콜 계층의 몫입니다.

SM4가 WebCrypto에 있나? 아니요 — 어떤 브라우저도 구현하지 않습니다. 그래서 이 페이지는 JavaScript로 처음부터 구현한 것을 돌리며, 표준 자체의 테스트 벡터를 위 자체 테스트에 연결해 두었습니다.

다른 곳에서 암호화한 것을 복호화할 수 있나? 네, 모드, 키, IV, PKCS#7이 쓰였다는 것을 안다면 가능합니다 — 암호문을 hex 또는 Base64로 붙여넣고 복호화로 전환하면 됩니다.