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

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



답변

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

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

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


답변

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

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

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


답변

Base-64 인코딩은 이진 데이터를 가져 와서 텍스트로 변환하여 전자 메일 및 HTML 양식 데이터와 같은 방식으로보다 쉽게 ​​전송할 수있는 방법입니다.

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


답변

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

그러나 왜 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 배에 불과합니다.


답변

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

해시 :

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

암호화 :

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

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

증명서

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


답변

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


답변

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

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

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

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

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