Base 64 인코딩은 무엇에 사용됩니까?


782

사람들이 여기저기서 "base 64 encoding"에 대해 이야기하는 것을 들었습니다. 무엇을 위해 사용됩니까?


1
base64_encode ()에 대한 매뉴얼에서 : "이 인코딩은 이진 데이터가 메일 본문과 같이 8 비트가 깨끗하지 않은 전송 계층을 통해 전송을 유지하도록 설계되었습니다."
still_dreaming_1

답변:


940

네트워크를 통해 전달하려는 이진 데이터가있는 경우 일반적으로 와이어를 통해 원시 형식으로 비트와 바이트를 스트리밍하기 만하면됩니다. 왜? 일부 미디어는 텍스트 스트리밍 용으로 만들어 졌기 때문입니다. 알 수 없음-일부 프로토콜은 이진 데이터를 모뎀과 같은 제어 문자로 해석하거나 기본 프로토콜이 특수 문자 조합을 입력했다고 생각할 수 있기 때문에 이진 데이터가 망가질 수 있습니다 (FTP가 줄을 변환하는 방법 등) 결말).

따라서이 문제를 해결하기 위해 사람들은 이진 데이터를 문자로 인코딩합니다. Base64는 이러한 유형의 인코딩 중 하나입니다.

왜 64입니까?
일반적으로 많은 문자 집합에 동일한 64 개의 문자를 사용할 수 있기 때문에 데이터가 손상되지 않은 와이어의 다른쪽에있을 것이라고 확신 할 수 있습니다.


104
(이론적으로 base-80 인코딩 또는 이와 유사한 것을 할 수는 있지만 상당히 어려울 것입니다. 2의 거듭 제곱은 이진의 기본이됩니다.)
Jon Skeet

13
@yokees : 보증은 없으며 거의 항상 안전한 캐릭터 일뿐 입니다. 이것이 여러 형태의 Base-64 ( en.wikipedia.org/wiki/Base-64 ) 가있는 이유 입니다.

8
이는 모든 네트워크 유형 데이터 전달이 일종의 인코딩을 사용해야 함을 의미합니까?
Tanner Summers

6
그러나 왜 base64 방법이 문자열 데이터를 인코딩하는 데 사용됩니까? 예를 들어 자바 스크립트 atob 함수에서 json 파일을 base64 형식으로 인코딩한다는 의미입니까? 특수 문자는 유스 케이스가 될 수 있지만 그 경우 utf8이 아닌 이유는 동일합니까? 이에 대한 추가 자료는 대단히 감사합니다.
partizanos

4
누군가가 알고 있다면 실패 할 프로토콜의 목록이 있으면 좋을 것입니다.
Tadej

202

기본적으로 ASCII 텍스트로 임의의 이진 데이터를 인코딩하는 방법입니다. 3 바이트의 데이터 당 4 개의 문자와 끝 부분에 약간의 패딩이 필요합니다.

기본적으로 입력의 각 6 비트는 64 자 알파벳으로 인코딩됩니다. "표준"알파벳은 AZ, az, 0-9 및 + 및 /를 사용하고 =를 패딩 문자로 사용합니다. URL 안전 변형이 있습니다.

Wikipedia 는 합리적으로 유용한 추가 정보 소스입니다.


PHP와 같은 언어로 바이너리 데이터가 나올 것입니다. 거의 항상 텍스트 인 문자열 데이터로 작업합니다.
Cholthi Paul Ttiopic

3
@CholthiPaulTtiopic : 암호화 또는 압축 또는 사운드 / 이미지 / 비디오의 결과.
Jon Skeet

1
@CholthiPaulTtiopic : "스토리지는 어떻습니까"라는 말의 의미가 무엇인지 모르겠지만이 시점에서 우리는 다소 논란의 여지가 있다고 생각합니다.
Jon Skeet

2
@CholthiPaulTtiopic : "문자열 이진"의 관점에서 생각하지 않는 것이 좋습니다. 이진 데이터는 이진 데이터로 취급되어야 하지 텍스트로 처리 하였다. 나는 기본적 으로이 구별을 충분히 돌보지 않는 사람들에게 기본적으로 나오는 SO에 관한 수백-아마도 수천 개의 질문을 보았습니다.
Jon Skeet

1
@ still_dreaming_1 PHP가 호출합니다 binary strings. (출처) php.net/manual/en/function.pack.php
Cholthi Paul Ttiopic


116

결과 텍스트에 문자, 숫자 및 기호 "+", "/"및 "="만있는 이진 데이터의 텍스트 인코딩입니다. 텍스트 데이터에 특별히 사용되는 미디어를 통해 이진 데이터를 저장 / 전송하는 편리한 방법입니다.

그러나 왜 Base-64입니까? 이진 데이터를 텍스트로 즉시 변환하는 두 가지 대안은 다음과 같습니다.

  1. 10 진수 : 각 바이트의 10 진수 값을 3 개의 숫자 (045 112 101 037 등)로 저장합니다. 여기서 각 바이트는 3 바이트로 표시됩니다. 데이터가 3 배 증가했습니다.
  2. 16 진 : 바이트를 16 진 쌍 : AC 47 0D 1A 등으로 저장하십시오. 여기서 각 바이트는 2 바이트로 표시됩니다. 데이터 팽창은 두 가지입니다.

Base-64는 6 비트 (6 x 4 = 24 비트)에 걸쳐있는 4 개의 문자로 3 바이트 (8 x 3 = 24 비트)를 매핑합니다. 결과는 "TWFuIGlzIGRpc3Rpb ..."와 유사합니다. 따라서 팽만감은 원본의 4/3 = 1.3333333 배에 불과합니다.


10
인쇄 가능한 ASCII 문자로 변환 할 수있는 2의 최대 제곱 (64 개 중 95 개)이므로 64가 최선의 선택이라는 것을 올바르게 이해하고 있습니까?
voho

두 경우 모두 24 비트이면 팽만감이 아닌가요? 또는 6 비트에 걸쳐있는 4 개의 문자를 말할 때 실제로 문자 당 8 비트가 있지만 처음 두 개는 0으로 채워져 있음을 의미합니까?
David Klempfner 19

1
@Backwards_Dave 각 6 비트는 8 비트로 표현됩니다. 따라서 팽만감은 8 : 6 또는 4 : 3입니다.
Ates Goral

82

이미 언급 된 것 외에도 나열되지 않은 두 가지 일반적인 용도는 다음과 같습니다.

해시 :

해시는 바이트 블록을 128 비트 또는 256 비트 (SHA / MD5)와 같은 고정 크기의 다른 바이트 블록으로 변환하는 단방향 함수입니다. 결과 바이트를 Base64로 변환하면 무결성에 대한 체크섬을 비교할 때 특히 해시를 훨씬 쉽게 표시 할 수 있습니다. 많은 사람들이 Base64 자체를 해시로 잘못 생각하는 Base64에서 해시가 자주 나타납니다.

암호화 :

암호화 키는 텍스트가 아니라 원시 바이트 일 필요가 없기 때문에 Base64에 유용한 파일이나 데이터베이스에 저장해야하는 경우가 있습니다. 결과 암호화 된 바이트와 동일합니다.

Base64는 종종 암호화에서 사용되지만 보안 메커니즘은 아닙니다. 누구나 Base64 문자열을 원래 바이트로 다시 변환 할 수 있으므로 원시 바이트를보다 쉽게 ​​표시하거나 저장하는 형식으로 만 데이터를 보호하는 수단으로 사용해서는 안됩니다.

증명서

PEM 형식의 x509 인증서는 기본 64로 인코딩됩니다. http://how2ssl.com/articles/working_with_pem_files/


4
실제로 많은 경우 바이트를 바이트로 저장하는 것이 처리 측면에서 더 쉽습니다. 데이터베이스, 특히 파일에서도 (길이가 긴 레코드가 사용되거나 바이트가 유일한 내용 인 경우). Base64는 일반적으로 해당 바이트가 어딘가, 특히 비트를 떨어 뜨리거나 일부 바이트를 제어 코드로 해석 할 수있는 채널을 통해 전송 될 때 사용됩니다 .
cHao

서명되지 않은 8 비트 정수, 0,1,255,36으로 작성된 해시를 본 적이 없으며 UTF-8 또는 다른 인코딩으로 표시하는 것이 의미가 없습니다 .base64 이외의 다른 표시 방법은 무엇입니까? 암호화 키와 암호화 된 데이터는 종종 원시 바이트를 저장할 수없는 구성 및 XML 파일에 저장됩니다. 나는 당신이 그것을 원시 바이트로 저장할 수 있다면 반드시 동의하지만, base64는 당신이 할 수없는 상황을위한 것입니다. 전송 이외에도 base64가 많이 사용됩니다. 이것들은 두 가지 일반적인 시나리오입니다.
Despertar

1
해시는 10 진수가 아닌 16 진수로 표시합니다. 해시의 경우 실제로 base64보다 훨씬 일반적입니다.
cHao

@cHao 예, 이것은 또한 일반적입니다. 16 진수는 모든 이진 데이터를 나타낼 수 있지만 64 진수는 더 많은 문자를 사용하므로 더 적은 공간을 차지한다는 이점이 있습니다.
Despertar

45

몇 년 전, 메일 기능이 도입되면서 시간이 지남에 따라 이미지 및 미디어 (오디오, 비디오 등)와 같은 첨부 파일이 필요하게되었습니다. 이러한 첨부 파일이 인터넷 (기본적으로 이진 데이터 형식)을 통해 전송 될 때 이진 데이터가 손상 될 가능성은 원래 형식으로 높습니다. 따라서이 문제를 해결하기 위해 BASE64가 등장했습니다.

이진 데이터의 문제는 C, C ++와 같은 일부 언어에서 문자열의 끝을 나타내는 null 문자를 포함하므로 NULL 바이트를 포함하는 원시 형식으로 이진 데이터를 보내면 파일이 완전히 읽히지 않고 손상된 데이터가 발생할 수 있습니다.

예를 들어 :

C 및 C ++에서이 "널"문자는 문자열의 끝을 나타냅니다. "HELLO"는 다음과 같이 저장됩니다 :

여보세요

72 69 76 76 79 00

00은 "여기서 멈추십시오"라고 말합니다.

이제 BASE64 인코딩의 작동 방식에 대해 알아 보겠습니다.

참고 사항 : 문자열의 길이는 3의 배수 여야합니다.

예 1 :

인코딩 할 문자열 : "ace", Length = 3

1) 각 문자를 10 진수로 변환합니다.

a = 97, c = 99, e = 101

여기에 이미지 설명을 입력하십시오

2) 각 10 진수를 8 비트 이진 표현으로 변경하십시오.

97 = 01100001, 99 = 01100011, 101 = 01100101

결합 : 01100001 01100011 01100101

3) 6 비트 그룹으로 분리하십시오.

011000 010110 001101 100101

4) 이진수를 10 진수로 계산

011000 = 24, 010110 = 22, 001101 = 13, 100101 = 37

5) base64 차트를 사용하여 10 진수를 base64로 변환합니다.

24 = Y, 22 = W, 13 = N, 37 = l

“ace”=>“YWNl”

여기에 이미지 설명을 입력하십시오

예 2 :

인코딩 할 문자열 :“abcd”Length = 4, 3의 배수는 아닙니다. 따라서 3의 배수로 문자열 길이를 곱하려면 length = 6으로 만들기 위해 2 비트 패딩을 추가해야합니다. 패딩 비트는“=”기호로 표시됩니다.

주목할 점 : 1 개의 패딩 비트는 2 개의 0과 같으므로 2 개의 패딩 비트는 4 개의 0과 같습니다 (0000).

프로세스를 시작하자 :

1) 각 문자를 10 진수로 변환합니다.

a = 97, b = 98, c = 99, d = 100

2) 각 10 진수를 8 비트 이진 표현으로 변경하십시오.

97 = 01100001, 98 = 01100010, 99 = 01100011, 100 = 01100100

3) 6 비트 그룹으로 분리하십시오.

011000, 010110, 001001, 100011, 011001, 00

마지막 6 비트는 완전하지 않으므로 4 개의 0 "0000"과 같은 2 개의 패딩 비트를 삽입합니다.

011000, 010110, 001001, 100011, 011001, 000000 ==

이제는 동일합니다. 마지막에 두 개의 등호는 4 개의 0이 추가되었음을 나타냅니다 (디코딩에 도움이 됨).

4) 이진수를 10 진수로 계산합니다.

011000 = 24, 010110 = 22, 001001 = 9, 100011 = 35, 011001 = 25, 000000 = 0 ==

5) base64 차트를 사용하여 10 진수를 base64로 변환합니다.

24 = Y, 22 = W, 9 = j, 35 = j, 25 = Z, 0 = A ==

“abcd”=>“YWJjZA ==”


5
이것은 정말 좋은 설명입니다
maheshmnj

28

컴퓨터 초기의 전화선 시스템 간 통신이 특히 신뢰할 수 없었을 때, 데이터 무결성을 확인하는 빠르고 더러운 방법 인 "비트 패리티"가 사용되었습니다. 이 방법에서, 전송 된 모든 바이트는 7 비트의 데이터를 가지며, 8 번째는 1 또는 0이되어, 바이트에서 총 1 비트의 수가 짝수가되도록합니다.

따라서 0x01은 0x81로 전송됩니다. 0x02는 0x82입니다. 0x03은 ​​0x03 등으로 유지됩니다.

이 시스템을 더욱 발전시키기 위해 ASCII 문자 세트가 정의 될 때 00-7F 만 문자가 지정되었습니다. (현재까지 80-FF 범위에서 설정된 모든 문자는 비표준입니다)

오늘날 많은 라우터는 패리티 검사 및 바이트 변환을 하드웨어에 적용하여 연결된 컴퓨터가 7 비트 데이터를 엄격하게 처리하도록합니다. 이렇게하면 전자 메일 첨부 파일 (및 다른 모든 데이터, 즉 HTTP 및 SMTP 프로토콜이 텍스트 기반 인 이유)이 텍스트 전용 형식으로 변환됩니다.

라우터 중 몇 대가 90 년대에 살아 남았습니다. 나는 오늘 그들 중 어느 것이 사용되고 있는지 의심합니다.


2
이것은 훌륭한 토론 지점이자 흥미로운 역사 수업입니다. 감사합니다.
Dan Bechard

26

에서 http://en.wikipedia.org/wiki/Base64

Base64라는 용어는 특정 MIME 콘텐츠 전송 인코딩을 나타냅니다. 또한 이진 데이터를 숫자로 처리하고 기본 64 표현으로 변환하여 이진 데이터를 인코딩하는 유사한 인코딩 체계의 일반적인 용어로 사용됩니다. 베이스의 특정 선택은 문자 세트 인코딩 히스토리로 인한 것입니다. 대부분의 인코딩에 공통적 인 서브 세트의 일부이며 인쇄 가능한 64 문자 세트를 선택할 수 있습니다. 이 조합으로 인해 전자 메일과 같은 시스템을 통해 전송시 데이터가 수정되지 않을 수 있었지만 일반적으로 8 비트는 깨끗하지 않았습니다.

Base64는 다양한 상황에서 사용할 수 있습니다.

  • Evolution과 Thunderbird는 Base64를 사용하여 전자 메일 암호를 난독 처리합니다. [1]
  • Base64는 구분 기호 충돌을 일으킬 수있는 텍스트를 전송하고 저장하는 데 사용할 수 있습니다
  • Base64는 종종 암호화 키 관리의 오버 헤드를 유발하지 않으면 서 비밀을 가릴 수있는 빠르고 안전하지 않은 바로 가기로 사용됩니다.

  • 스패머는 Base64를 사용하여 스팸 방지 기본 도구를 피합니다.이 도구는 종종 Base64를 해독하지 않으므로 인코딩 된 메시지에서 키워드를 감지 할 수 없습니다.

  • Base64는 LDIF 파일에서 문자열을 인코딩하는 데 사용됩니다
  • Base64는 때때로 ......와 유사한 구문을 사용하여 XML 파일에 이진 데이터를 포함하는 데 사용됩니다 (예 : Firefox의 bookmarks.html).
  • Base64는 정부 Fiscal Signature 인쇄 장치와 통신 할 때 (보통 직렬 또는 병렬 포트를 통해) 서명을 위해 영수증 문자를 전송할 때 지연을 최소화하기 위해 사용됩니다.
  • Base64는 외부 파일에 의존하지 않도록 스크립트 내의 이미지와 같은 이진 파일을 인코딩하는 데 사용됩니다.
  • 원시 이미지 데이터를 배경 이미지와 같은 CSS 속성에 포함시키는 데 사용할 수 있습니다.

11

일부 운송 프로토콜에서는 영숫자 문자 만 전송할 수 있습니다. 제어 문자를 사용하여 특수 동작을 트리거하거나 문자 당 제한된 비트 폭만 지원하는 상황을 상상해보십시오. 64 기수 영숫자를 이용하는 인코딩에 어떤 입력을 변환 +, /=패딩 자로.


8

여기서 설명 할 Base64의 사용법은 다소 해킹입니다. 따라서 해킹을 좋아하지 않으면 계속하지 마십시오.

MySQL의 utf8은 3 바이트 버전의 utf8을 사용하기 때문에 4 바이트 유니 코드 문자를 지원하지 않는다는 것을 알았을 때 문제가 발생했습니다. 그렇다면 MySQL의 utf8보다 완전한 4 바이트 유니 코드를 지원하기 위해 무엇을 했습니까? 음, base64는 데이터베이스에 저장할 때 문자열을 인코딩하고 검색 할 때 base64 디코딩을 수행합니다.

base64 인코딩 및 디코딩이 매우 빠르기 때문에 위의 내용은 완벽하게 작동했습니다.

다음 사항에 유의하십시오.

  • Base64 인코딩은 33 % 더 많은 스토리지 사용

  • 데이터베이스에 저장된 문자열은 사람이 읽을 수 없습니다 (데이터베이스 문자열이 기본 암호화 형식을 사용하는 기능으로 판매 할 수 있음).

유니 코드를 지원하지 않는 모든 스토리지 엔진에 대해 위의 방법을 사용할 수 있습니다.


6
"데이터베이스 문자열이 기본 암호화 형식을 사용하는 기능으로 판매 할 수 있습니다."나는 당신의 스타일을 좋아합니다 : D
Ercan

7
"데이터베이스 문자열이 기본 암호화 형식을 사용하는 기능으로 판매 할 수 있습니다"라고 말하는 것이 끔찍한 일입니다. : D
Alex

1
base64 디코드 알고리즘이없는 사람에 대한 기본 암호화 형식 rofl : D
Eladian

1
@Alex 전혀 "끔찍한 말"은 아닙니다. DB 관리자가 읽을 수 없도록 2 차 민감한 데이터는 base64로 인코딩해도됩니다. 모든 데이터에 대해 항상 최고 수준의 암호화가 필요한 것은 아닙니다. 예를 들어, DB 관리자로부터 "설명"을 숨기려면 base64가 작업에 적합합니다. 그라시아 스!
Basil Musa

1
MySQL은 이제 모든 유니 코드를 지원하지만 이전 버전과의 호환성을 위해 utf8유형은 여전히 ​​3 바이트입니다. 진짜를 원한다면을 사용하십시오 utf8mb4. 좋은 해킹이지만 더 이상 필요하지 않습니다.
TRiG

7

임의의 이진 데이터를 ASCII 텍스트로 변환하는 데 사용됩니다.

예를 들어, 전자 메일 첨부 파일이 이런 방식으로 전송됩니다.


7

웹 서비스를 통해 큰 이진 객체 (이미지)를 전송할 때 실용적인 의미로 사용합니다. 그래서 파이썬 스크립트를 사용하여 C # 웹 서비스를 테스트 할 때 약간의 마술로 바이너리 객체를 다시 만들 수 있습니다.

[파이썬에서]

import base64
imageAsBytes = base64.b64decode( dataFromWS )

1
데이터가 더 빨리 이동합니까?
FelipeM

6

“Base64 인코딩 체계는 텍스트 데이터를 처리하도록 설계된 미디어를 통해 저장 및 전송해야하는 이진 데이터를 인코딩해야 할 때 일반적으로 사용됩니다. 이는 전송 중에 데이터를 수정하지 않고 그대로 유지하기위한 것입니다.”(Wiki, 2017)

예는 다음과 같습니다. ASCII 문자 만 허용하는 웹 서비스가 있습니다. 사용자 데이터를 저장 한 다음 다른 위치 (API)로 전송하려고하지만 수신자는 변경되지 않은 데이터를 수신하려고합니다. Base64가 그런 것입니다. . . 유일한 단점은 base64 인코딩에는 일반 문자열보다 약 33 % 더 많은 공간이 필요하다는 것입니다.

다른 예 :: uenc = url 인코딩 = aHR0cDovL2xvYy5tYWdlbnRvLmNvbS9hc2ljcy1tZW4tcy1nZWwta2F5YW5vLXhpaS5odG1s = http://loc.querytip.com/asics-men-s-gel-kayano-xii.html .

보시다시피“MOD rewrite”– GET 매개 변수에 대한 속성 / 값 규칙을 위반하므로 마지막 방문 URL을 매개 변수로 보내려면 URL에 문자“/”를 넣을 수 없습니다.

전체 예는 다음과 같습니다.“ http://loc.querytip.com/checkout/cart/add/uenc/http://loc.magento.com/asics-men-s-gel-kayano-xii.html/product / 93 /


4

주로 ASCII 또는 간단한 문자 집합 만 처리 할 수있는 컨텍스트에서 이진 데이터를 인코딩하는 데 사용되는 것을 보았습니다.


3

Brad의 말을 조금 더 확장하려면 : 이메일과 유즈넷을위한 많은 전송 메커니즘과 다른 데이터 이동 방법이 "8 비트 정리"가 아니기 때문에 표준 ASCII 문자 집합 외부의 문자가 전송 중에 엉망이 될 수 있습니다. 0x0D는 캐리지 리턴으로 간주되어 캐리지 리턴 및 줄 바꿈으로 바뀔 수 있습니다. Base 64는 모든 이진 문자를 여러 표준 ASCII 문자와 숫자 및 문장 부호로 매핑하므로이 방법으로 엉망이되지 않습니다.


2

Base64

Base64는 이진 데이터를 숫자로 처리하고이를 기본 64 표현으로 변환하여 인코딩하는 여러 가지 유사한 인코딩 체계의 일반적인 용어입니다. Base64 용어는 특정 MIME 컨텐츠 전송 인코딩에서 유래합니다.

Base64 인코딩 체계는 텍스트 데이터를 처리하도록 설계된 미디어를 통해 저장 및 전송해야하는 이진 데이터를 인코딩해야 할 때 일반적으로 사용됩니다. 이는 전송 중에 데이터를 수정하지 않고 그대로 유지하기위한 것입니다. Base64는 MIME을 통한 이메일, 복잡한 데이터를 XML로 저장하는 등 여러 응용 프로그램에서 일반적으로 사용됩니다.


0

Base64는 다양한 목적으로 사용될 수 있습니다.

주요한 이유는 이진 데이터를 전달 가능한 것으로 변환하는 것입니다.

때로는 JSON 데이터를 한 사이트에서 다른 사이트로 전달하고 사용자에 대한 쿠키에 정보를 저장하는 데 사용합니다.

참고 : 암호화에 "사용"할 수 있습니다. 사람들이 왜 그렇게 할 수 없다고 말했는지는 알 수 없으며 암호화가 쉽지 않습니다. 암호화는 하나의 데이터 문자열을 나중에 해독하거나 해독 할 수있는 다른 데이터 문자열로 변환하는 것 이상을 의미합니다. 이것이 base64의 기능입니다.



2
당신은 "암호화"의 정의를 해석하고 지금까지 너무 문자 그대로. 이 단어는 그 기원보다 조금 더 구체적으로 진화했습니다.
Dan Bechard

0

하나의 16 진수는 하나의 니블 (4 비트)입니다. 2 개의 니블은 8 비트를 만들어 1 바이트라고도합니다.

MD5는 32 개의 16 진수 시퀀스를 사용하여 표현되는 128 비트 출력을 생성하며, 이는 32 * 4 = 128 비트입니다. 128 비트는 16 바이트를 만듭니다 (1 바이트는 8 비트이므로).

각 Base64 문자는 6 비트를 인코딩합니다 (2, 4 또는 6 비트를 인코딩 할 수있는 마지막 비 패드 문자 및 마지막 패드 문자 (있는 경우) 제외). 따라서 Base64 인코딩에 따라 128 비트 해시에는 ⌈128 / 6⌉ = 22 자 이상이 있고 패드가 있으면 패드가 필요합니다.

base64를 사용하여 원하는 길이 (6, 8 또는 10)의 인코딩 된 출력을 생성 할 수 있습니다. 8 자 길이의 출력을 결정하기로 선택하면 8 비트 만 차지하지만 128 비트 해시 출력에서는 16 바이트를 차지합니다.

따라서 보안 외에도 base64 인코딩을 사용하여 소비되는 공간을 줄입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.