Skip to main content

Base64 인코딩

Base64는 이진 데이터(Binary Data)를 64개의 안전한 ASCII 문자(Text)로 변환하는 인코딩(Encoding) 방식입니다.

결제 시스템에서는 주로 **API 인증 정보(Basic Auth)**를 생성하거나, 전자서명 값 등 바이너리 데이터를 HTTP 통신으로 안전하게 전송하기 위해 사용됩니다.


🔄 작동 원리 (Mechanism)

데이터를 암호화하는 것이 아니라, 통신 과정에서 데이터가 깨지지 않도록 문자 포맷만 변경하는 것입니다. 따라서 누구나 쉽게 다시 원본으로 되돌릴(Decoding) 수 있습니다.


💡 결제 연동 활용 사례

1. Basic 인증 헤더 생성

이지페이 간편결제 등에서 사용하는 인증 방식입니다.

  • Service ID콜론(:)을 합친 문자열을 Base64로 변환하여 헤더에 담습니다.
  • 예: KICC_USER: $\to$ S0lDQ19VU0VSOg==

2. 바이너리 데이터 전송

암호화된 전자서명 값이나 이미지 파일 등을 JSON이나 XML 포맷에 담아 보낼 때 사용합니다. 바이너리 데이터를 그대로 보내면 통신 중 문자가 깨질 수 있기 때문입니다.


⚠️ 보안 주의사항 (Not Encryption)

초보 개발자가 가장 많이 하는 오해는 "Base64로 바꿨으니 안전하다"고 생각하는 것입니다.

🛑 이것은 암호화가 아닙니다!

Base64는 단순한 변환입니다. 비밀번호나 개인정보를 Base64로만 인코딩해서 전송하면, 해커가 즉시 디코딩하여 내용을 볼 수 있습니다. 따라서 Base64를 사용할 때는 반드시 HTTPS (SSL) 암호화 통신 위에서 전송해야 합니다.


💻 언어별 변환 예제

Node.js (JavaScript)

const text = "KICC_TEST";

// 인코딩 (Encode)
const encoded = Buffer.from(text).toString('base64');
console.log(encoded); // "S0lDQ19URVNU"

// 디코딩 (Decode)
const decoded = Buffer.from(encoded, 'base64').toString('utf-8');
console.log(decoded); // "KICC_TEST"

Java

import java.util.Base64;

String text = "KICC_TEST";

// 인코딩
String encoded = Base64.getEncoder().encodeToString(text.getBytes());

// 디코딩
byte[] decodedBytes = Base64.getDecoder().decode(encoded);
String decoded = new String(decodedBytes);

Python

import base64

text = "KICC_TEST"

# 인코딩
encoded = base64.b64encode(text.encode()).decode()

# 디코딩
decoded = base64.b64decode(encoded).decode()