backend
  • README
  • DOCS
    • Java Docs
    • Servlet Docs
    • JSP Docs
    • DB & SQL Docs
    • Spring Boot Docs
    • Spring Security Docs
    • AWS Docs
  • 설치하기
    • Intellij 설정
  • 자바
    • 01 Java란?
    • 02 자바 시작하기
    • 03 자료형과 연산자
    • 04 제어문
    • 05 메소드
    • 06 클래스 기초
      • Static 보충자료
      • 패키지 보충자료
    • 07 객체지향 프로그래밍
    • 08 클래스 더 알아보기
      • 열거형 ENUM 보충자료
    • 09 클래스와 자료형
      • 다형성 보충자료
      • 제네릭 보충자료
    • 10 컬렉션 프레임워크
      • 컬렉션 프레임워크 보충자료
    • 11 람다식과 함수형 프로그래밍
      • 람다식 보충자료
    • 12 오류 대비하기
      • 오류 보충자료
    • 13 멀티태스킹
      • 멀티태스킹 보충자료
    • 교재보충
      • java.lang
  • 스프링
    • 서블릿, JSP
      • 05 Servlet(서블릿)
        • 서블릿 보충자료
        • 서블릿 추가코드
        • XML, YAML, JSON
      • 06 JSP(자바 서버 페이지)
        • JSP 보충자료
      • 07 JSTL(JSP 스탠다드 태그 라이브러리)
        • JSTL 보충자료
      • 08 Cookie(쿠키), Session(세션)
      • 09 서블릿,필터,리스너
        • 서블릿,필터,리스너 보충자료
      • 11 도서관리 프로젝트 실습
    • Spring Boot
      • 01 스프링 등장 배경, 객체지향
        • 스프링 등장 배경, 객체지향 보충자료
      • 02 IOC(제어의 역전), DI(의존성 주입)
        • IOC 보충자료
        • DI 보충자료
      • 03 스프링 구조
        • 스프링 구조 보충설명
      • 04 테스트코드 실습
      • 05 스프링 빈 설정
        • 스프링 빈 설정 보충자료
      • 06 싱글톤
        • 싱글톤 보충 자료
      • 07 스프링 빈 자동설정
        • 스프링 빈 자동설정 보충자료
      • 08 빈 생명주기
        • 빈 생명주기 보충자료
      • 09 빈 스코프
        • 빈 스코프 보충자료
      • 10 스프링 MVC
        • 스프링 MVC 보충자료
        • 데이터베이스 연동에 필요한 부분
      • 11 Validation(검증)
        • Validation(검증) 보충자료
      • 12 Bean Validation(빈검증)
        • Bean Validation(빈검증) 보충자료
      • 13 예외처리
        • 예외처리 보충자료
      • 14 타입변환
      • 15 JDBC(Java Database Connectivity)
      • 16 커넥션풀
      • 17 트랜잭션
        • 트랜잭션 보충자료
      • 18 JDBC 템플릿 활용
      • 19 MyBatis
      • 20 JPA(Java Persistence API)
      • 22 게시판 프로젝트 실습
    • Spring Security
      • 보안(Security)
      • Spring Security
      • 2. Spring Security 알아보기
        • 보안 위협 실제 사례와 방어 전략
      • 3. Spring Security 기본 동작 흐름
      • 4. Spring Security로 인증 권한 추가하기
        • Spring Security의 인증 및 인가
      • 5. Spring Security에서 세션 관리하기
        • 세션(Session)과 쿠키(Cookie) 비교, 토큰(Token)과의 관계
        • 해싱 및 해싱알고리즘
        • base64
      • 6. Spring Security 악용 보호
        • SameSite
      • 7. Spring Security로 인가 권한 추가하기
      • 8. Bcrypt(비크립트) 암호화
      • OAuth2 적용하기
  • 네트워크
    • HTTP
    • OSI 7계층
  • DB&SQL
    • 01 Database(데이터베이스)와 SQL 개요
    • 02 관계형 모델
    • 03 집합
    • 04 JOIN 연산
    • 05 MySQL
      • 세이브포인트
      • DBeaver, Mysql 오토커밋 설정 관련
    • 06 SQL 기초
      • 예시데이터 쿼리문
    • 07 SQL 실습
      • 실습 스키마
    • 08 Join 활용
      • 실습스키마
    • 09 SQL 활용
      • 실습스키마
    • 10 정규화
      • 실습 스키마
    • 데이터타입
    • 예시 프로젝트 스키마 구성
  • AWS
    • SSL 연결하기
    • 보충설명
Powered by GitBook
On this page
  1. 스프링
  2. Spring Security
  3. 5. Spring Security에서 세션 관리하기

base64

Base64란?

Base64는 바이너리 데이터를 ASCII 문자로 인코딩하는 방법입니다. 주로 데이터를 **텍스트 기반 프로토콜(예: 이메일, JSON, XML)**로 전송하거나 저장할 때 사용됩니다. 바이너리 데이터를 Base64로 변환하면 데이터를 손실 없이 텍스트로 표현할 수 있습니다.


Base64 인코딩 과정

  1. 입력 데이터 변환:

    • 입력 데이터를 8비트 바이너리로 변환.

    • 예: "ABC" -> 01000001 01000010 01000011

  2. 비트 그룹화:

    • 데이터를 6비트 단위로 나눔. Base64는 6비트마다 하나의 문자로 매핑됨.

    • 예: 01000001 01000010 01000011 -> 010000 010100 001001 000011

  3. 64개의 문자로 매핑:

    • 각 6비트 값을 Base64 문자 집합으로 변환.

    • Base64 문자 집합:

      A-Z (26개), a-z (26개), 0-9 (10개), +, /
    • 예: 010000 -> Q, 010100 -> U, 001001 -> J, 000011 -> D

  4. 패딩 처리:

    • 입력 데이터 길이가 3의 배수가 아닌 경우, 마지막 6비트 단위의 데이터를 채우기 위해 **패딩 문자("=")**를 추가.

    • 예: "AB" (2바이트) -> QUJD==


Base64 디코딩 과정

  1. Base64 문자열을 6비트 단위로 변환.

  2. 6비트 단위를 8비트로 병합하여 원래의 바이너리 데이터를 복원.

  3. 패딩(=)은 복원 과정에서 제거.


Base64 변환 과정 예제

Python으로 Base64 변환

import base64

# 인코딩
data = "Hello, World!"
encoded = base64.b64encode(data.encode())
print("Base64 Encoded:", encoded.decode())

# 디코딩
decoded = base64.b64decode(encoded).decode()
print("Base64 Decoded:", decoded)

결과

Base64 Encoded: SGVsbG8sIFdvcmxkIQ==
Base64 Decoded: Hello, World!

Base64 결과는 항상 동일한가?

  1. 항상 동일한 결과:

    • 같은 입력 데이터라면 Base64 인코딩 결과는 항상 동일합니다. Base64는 결정적(Deterministic) 알고리즘이기 때문에 동일한 입력 -> 동일한 출력이 보장됩니다.

    • 예: "Hello"를 Base64로 인코딩하면 항상 SGVsbG8=가 나옵니다.

  2. 입력이 다를 경우:

    • 입력 데이터가 조금이라도 다르면 Base64 출력도 완전히 달라집니다.

  3. 패딩(=):

    • 입력 데이터 길이가 3의 배수가 아닌 경우 Base64 출력에 =가 추가됩니다.

    • 예:

      • "A" -> QQ==

      • "AB" -> QUI=

      • "ABC" -> QUJD

  4. URL-Safe Base64:

    • 표준 Base64 문자 집합에서 +와 /는 URL에서 문제가 될 수 있으므로, 이를 각각 -와 _로 바꾼 URL-Safe Base64도 존재합니다. 이 경우 결과 값은 표준 Base64와 다를 수 있습니다.

    • Python에서는 base64.urlsafe_b64encode를 사용.


Base64의 단점

  1. 출력 크기 증가:

    • Base64로 인코딩하면 데이터 크기가 약 33% 증가합니다.

    • 이유: 8비트를 6비트 단위로 변환하기 때문.

  2. 보안 목적에는 부적합:

    • Base64는 암호화가 아니며, 단순히 데이터를 변환하는 방법일 뿐입니다. 누구든 Base64 문자열을 디코딩할 수 있습니다.


Base64의 활용 사례

  1. 이메일 전송(MIME):

    • 이메일 첨부 파일을 Base64로 인코딩하여 텍스트로 변환한 뒤 전송.

  2. 웹 애플리케이션:

    • 이미지나 바이너리 데이터를 JSON이나 XML로 전송할 때 Base64를 사용.

  3. JWT(JSON Web Token):

    • JWT의 Header와 Payload는 Base64로 인코딩되어 전송됩니다.

  4. 데이터 URI:

    • HTML이나 CSS에서 인라인 이미지를 표현할 때 Base64 데이터 URI를 사용.

    html복사편집<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..." />

Previous해싱 및 해싱알고리즘Next6. Spring Security 악용 보호

Last updated 3 months ago