인코딩·보안

Base64는 암호화가 아니다: 인코딩·암호화·해시의 차이

Base64가 실제로 하는 일, 비밀을 지킬 수 없는 이유, 암호화·해시와의 차이, 텍스트와 파일을 인코딩·디코딩하는 방법을 설명합니다.

게시일:

한 문장 요약

Base64는 바이트 데이터를 영문자·숫자 같은 글자로 바꿔, 텍스트만 다루는 시스템에서도 데이터를 옮길 수 있게 하는 방식입니다. 누구나 원래대로 되돌릴 수 있습니다. 키도, 비밀도 없습니다.

세 가지의 차이

Base64(인코딩) 암호화(AES 등) 해시(SHA-256 등)
목적 바이트를 글자로 표현 데이터를 비밀로 유지 지문·변조 확인
되돌릴 수 있나 누구나 가능 키가 있어야 가능 불가능
키 필요 없음 필요 필요 없음
주요 용도 메일 첨부, 데이터 URL, JSON 값, 토큰 HTTPS, 암호화 파일, 비밀번호 관리자 다운로드 확인, 중복 검사

설정 파일에 cGFzc3dvcmQxMjM= 라고 적혀 있어도 보호된 비밀번호가 아닙니다. 디코딩하면 바로 password123 이 됩니다.

예시: 텍스트 인코딩·디코딩

  1. Base64 변환을 엽니다.
  2. 작업에서 인코딩을 고르고, 입력 종류는 텍스트 그대로 두고 hello 를 입력합니다.
  3. 인코딩하기를 누르면 결과는 aGVsbG8= 입니다.
  4. 한글 등은 UTF-8로 바꾼 뒤 인코딩합니다. 안녕 은 7JWI64WV, こんにちは 는 44GT44KT44Gr44Gh44Gv 가 됩니다.
  5. 되돌리려면 작업을 디코딩으로 바꾸고 Base64를 붙여 넣은 뒤 디코딩하기를 누릅니다. 결과를 입력으로 버튼으로 결과를 입력란에 옮길 수 있습니다.

Base64 결과는 원래 데이터보다 약 3분의 1 커집니다(3바이트가 4글자가 되기 때문).

예시: 파일을 데이터 URL로 만들기

작은 아이콘을 HTML이나 CSS에 직접 넣으려면:

  1. 인코딩을 고르고 입력 종류를 파일로 바꾼 뒤 이미지를 선택합니다.
  2. 데이터 URL 형식으로를 켭니다. 결과는 data:image/png;base64,… 로 시작합니다.
  3. <img src="…"> 나 background-image: url(…) 에 붙여 넣습니다.

작은 파일에만 쓰는 방법입니다. 100KB 이미지는 페이지 안에서 약 133KB의 글자가 되고, 별도 파일처럼 캐시되지도 않습니다.

URL 안전 Base64

표준 Base64는 + 와 / 를 쓰는데, 이 문자는 URL 안에서 특별한 의미가 있습니다. URL 안전 형식은 대신 - 와 _ 를 쓰고 보통 끝의 = 를 뺍니다. JWT(JSON Web Token)가 이 형식입니다. 인코딩할 때 URL 안전을 켜면 됩니다. 디코딩할 때는 두 형식을 모두 자동으로 읽습니다.

실제로 필요한 것이 다른 경우

  • 데이터를 비밀로 지키고 싶다: Base64가 아니라 제대로 된 키를 쓰는 암호화(암호화 압축 파일, 비밀번호 관리자 등)를 사용합니다.
  • 직접 만든 서비스에 비밀번호를 저장해야 한다: Argon2, scrypt, bcrypt 같은 비밀번호 전용 해시 함수를 씁니다. SHA-256을 한 번 거는 것만으로는 부족합니다.
  • 내려받은 파일이 바뀌지 않았는지 확인하고 싶다: 해시 계산으로 SHA-256 값을 구해 배포처의 값과 비교합니다.
  • 새로운 강한 비밀번호가 필요하다: 비밀번호 생성을 씁니다.

자주 생기는 문제

  • 디코딩한 글자가 깨져 보임: 원래 데이터가 텍스트가 아닐 수 있습니다(이미지, ZIP, 압축 데이터 등). 텍스트로 읽지 말고 파일로 저장을 쓰세요.
  • “잘못된 문자” 오류: 복사할 때 다른 글자가 섞이지 않았는지, 문자열이 중간에 잘리지 않았는지 확인하세요.
  • 문자가 섞여 있다는 경고: 입력에 + / 와 - _ 가 함께 들어 있습니다. 서로 다른 데이터가 이어 붙었을 수 있습니다.
  • Basic 인증 헤더 속 계정 정보: Authorization: Basic dXNlcjpwYXNz 는 user:pass 를 Base64로 바꾼 것일 뿐입니다. HTTPS에서만 안전하게 쓸 수 있습니다.

← 사용 가이드 목록