문제

내가 들었어요 사람들이 이야기에 대해"기본 64encoding"습니다.그것은 무엇을 위해 사용됩니까?

도움이 되었습니까?

해결책

네트워크를 통해 배송하려는 이진 데이터가 있으면 일반적으로 원시 형식으로 와이어 위의 비트와 바이트를 스트리밍하는 것만으로도 수행하지 않습니다. 왜요? 일부 미디어는 스트리밍 텍스트를 위해 만들어 졌기 때문입니다. 알지 못합니다. 일부 프로토콜은 이진 데이터가 제어 문자 (모뎀과 같은)로 해석하거나 이진 데이터를 망칠 수 있습니다. 기본 프로토콜은 특수 문자 조합을 입력했다고 생각할 수 있기 때문에 (FTP는 라인을 번역하는 방법 : 결말).

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

왜 64?
일반적으로 많은 캐릭터 세트에있는 동일한 64 자에 의존 할 수 있기 때문에 데이터가 와이어의 다른쪽에 부패하지 않을 것이라고 합리적으로 확신 할 수 있습니다.

다른 팁

기본적으로 ASCII 텍스트에서 임의의 이진 데이터를 인코딩하는 방법입니다. 3 바이트 당 4 자, 마지막에는 약간의 패딩이 필요합니다.

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

위키 백과 더 많은 정보의 합리적으로 좋은 소스입니다.

Base64 인코딩 방법을 이진 데이터로 변환하도록 텍스트는 그것의 더 쉽게에서 전송되는 것처럼 e-mail HTML 형태로 데이터입니다.

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

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

그러나 왜 BASE-64? 이진 데이터를 즉시 떠오르는 텍스트로 변환하기위한 두 가지 대안은 다음과 같습니다.

  1. 소수점 : 각 바이트의 10 진수 값을 세 가지 숫자로 저장하십시오. 045 112 101 037 등. 여기서 각 바이트는 3 바이트로 표시됩니다. 데이터는 세 가지가 부풀어 오른다.
  2. 16 진수 : 바이트를 육각 쌍으로 저장하십시오 : AC 47 0D 1A 등. 각 바이트는 2 바이트로 표시됩니다. 데이터는 두 배로 부풀어 오른다.

Base-64 Maps 3 바이트 (8 x 3 = 24 비트)는 6 비트 (6 x 4 = 24 비트)에 걸친 4 자입니다. 결과는 "twfuiglzigrpc3rpb ..."와 같은 것 같습니다. 따라서 팽만감은 원본의 4/3 = 1.333333 배에 불과합니다.

고객께서 무엇이 이미 말했다,두 개의 매우 일반적으로 사용하는 열거되어 있지 않은

해시:

해시는 하나의 방법 기능을 혁신하는 바이트 블록으로 다른 블록의 바이트의 크기가 고정되는 등 128 비트 또는 256 비트(샤/MD5).변환하는 결과의 바이트로 Base64 훨씬 쉽게 표시 해시 특별히 비교할 때 체크섬 무결성이 있습니다.해시는 그래서 자주 볼 수 있 Base64 많은 사람들이 있는 실수를 Base64 자체로 해시입니다.

암호:

이후 암호화 키어야 하지 않는 텍스트를하지만 원 바이트 그것은 때로는 필요에 저장하는 파일 또는 데이터베이스를 Base64 편리한다.와 같은 결과 암호화된 바이트입니다.

고 있지만 Base64 이에서 자주 사용하는 암호화되지 않는 보안 메커니즘이 있습니다.사람을 변환 할 수 있습니다 Base64 문자열을 다시 원래 바이트를,그래서 그것은 사용하지 않아야하는 수단으로 보호를 위한 데이터 형식으로 표시하거나 저장 raw 바이트를 더 쉽게입니다.

인증서

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

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

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

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

  • Evolution and Thunderbird 사용 Base64를 사용하여 전자 메일 암호를 난독 화합니다 [1
  • Base64는 구분 기자 충돌을 일으킬 수있는 텍스트를 전송하고 저장하는 데 사용될 수 있습니다.
  • Base64는 종종 암호화 키 관리의 오버 헤드를 발생시키지 않고 비밀을 가리기 위해 빠르고 안전하지 않은 단축키로 사용됩니다.

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

  • Base64는 LDIF 파일에서 문자열을 인코딩하는 데 사용됩니다.
  • Base64는 때때로 XML 파일에 이진 데이터를 포함시키는 데 사용되며, 예를 들어 Firefox의 책갈피와 비슷한 구문을 사용하여 이진 데이터를 포함시킵니다.
  • Base64는 서명을 위해 영수증 문자를 전송할 때 지연을 최소화하기 위해 정부 재정 시그니처 인쇄 장치 (일반적으로 직렬 또는 병렬 포트를 통해)와 통신 할 때 사용됩니다.
  • Base64는 외부 파일에 따라 피하기 위해 스크립트 내 이미지와 같은 이진 파일을 인코딩하는 데 사용됩니다.
  • 원시 이미지 데이터를 배경 이미지와 같은 CSS 속성에 포함시키는 데 사용할 수 있습니다.

초기에,컴퓨터의 경우 전화선 인터-시스템 통신이 없었다 특히 신뢰할 수있는,빠르고 더러운 방식의 데이터 무결성을 확인하는 데 사용되었:"비트 패리티".이 방법에서,모든 바이트로 전송되는 것이 7-비트 데이터 제 8 것 1 또는 0,힘의 총수는 1 비트를 바이트하게 정리해줍니다.

따라서 0x01 것 transmited 로 0x81;0x02 것 0x82;0x03 남아 있을 것입 0x03etc.

이 시스템을 때는 ASCII 문자 집합을 정의,만 00-7F 에 할당된 자입니다.(여전히 오늘날 모든 캐릭터 설정 범위에서 80-FF 는 비표준)

대부분의 라우터는 하루를 넣어 패리티 체크인 및 바이트 하드웨어로 번역을 강제로 연결된 컴퓨터들을 엄중히 처 7-비트 데이터입니다.이 힘을 이메일 첨부 파일(다른 모든 데이터는 이유입니다,HTTP&SMTP 프로토콜은 텍스트 기반),수로 변환 텍스트 형식입니다.

의 라우터에 살던 90 년대.내가 심각하게 의심을 사용 오늘날입니다.

일부 운송 프로토콜은 영숫자 문자 만 전송할 수있게합니다. 제어 캐릭터가 특수 액션을 트리거하는 데 사용되는 상황을 상상하거나 문자 당 비트 너비가 제한적인 상황을 상상해보십시오. 베이스 64 입력을 영숫자 만 사용하는 인코딩으로 변환합니다. +, / 그리고 = 패딩 캐릭터로.

여기서 설명 할 Base64의 사용은 다소 해킹입니다. 해킹이 마음에 들지 않으면 계속하지 마십시오.

MySQL의 UTF8이 3 바이트 버전의 UTF8을 사용하기 때문에 4 바이트 유니 코드 문자를 지원하지 않는다는 것을 알게되었을 때 어려움을 겪었습니다. 그렇다면 MySQL의 UTF8보다 4 바이트 유니 코드를 지원하기 위해 무엇을 했습니까? 글쎄, Base64는 데이터베이스에 저장할 때 문자열을 인코딩하고 검색 할 때 Base64 Decode.

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

다음과 같은 점이 있습니다.

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

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

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

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

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

웹 서비스를 통해 큰 이진 객체 (이미지)를 전송할 때 실용적으로 사용합니다. 따라서 Python 스크립트를 사용하여 C# 웹 서비스를 테스트 할 때 바이너리 객체를 작은 마법으로 재현 할 수 있습니다.

파이썬에서

import base64
imageAsBytes = base64.b64decode( dataFromWS )

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

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

또 다른 예 :: uenc = url encoded = ahr0cdovl2xvyy5tywdlbnrvlmnvbs9hc2ljcy1tzw4tcy1nzwwwta2f5yw5vlxhpas5odg1s = http://loc.querytip.com/asics-men-gel-kayano-xii.html.

보시다시피 "mod rewrite"에 대한 속성/값 규칙을 깨뜨 리기 때문에 마지막으로 방문한 URL을 매개 변수로 보내려면 char "/"를 URL에 넣을 수 없습니다.

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

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

Brad가 말하는 내용을 약간 확장하려면 : 이메일 및 USENET을위한 많은 전송 메커니즘 및 데이터 이동 방법 및 기타 이동 방법은 "8 비트 클린"이 아닙니다. 즉, 표준 ASCII 문자 세트 외부의 문자가 교통 수준으로 조인 될 수 있습니다. 0x0D는 캐리지 리턴으로 간주 될 수 있으며 캐리지 리턴 및 라인 피드로 바뀌 었습니다. 베이스 64는 모든 이진 문자를 여러 표준 ASCII 문자와 숫자 및 문장 부호로 맵핑하여 이런 식으로 엉망이되지 않습니다.

몇 년 전, 우편 기능이 도입되었을 때, 시간이 지남에 따라 이미지 및 미디어 (오디오, 비디오 등)와 같은 첨부 파일이 필요했을 때 완전히 텍스트를 기반으로했습니다. 이러한 첨부 파일이 인터넷을 통해 전송되면 (기본적으로 이진 데이터 형태) 이진 데이터가 손상 될 확률은 원시 형태로 높습니다. 따라서이 문제를 해결하기 위해 Base64가 나왔습니다.

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

예를 들어 :

C 및 C ++ 에서이 "NULL"문자는 문자열의 끝을 보여줍니다. 따라서 "안녕하세요"는 다음과 같이 저장됩니다.

안녕하세요

72 69 76 76 79 00

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

이제 Base64 인코딩이 어떻게 작동하는지 살펴 보겠습니다.

지적 지점 : 문자열의 길이는 3의 배수이어야합니다.

Example 1 :

인코딩 할 문자열 :“에이스”, 길이 = 3

1) 각 문자를 소수로 변환하십시오.

a = 97, c = 99, e = 101

enter image description here

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 차트를 사용하여 Base64에 대한 미밀 문자.

24 = y, 22 = w, 13 = n, 37 = L

“에이스”=>“ywnl”

enter image description here

Example 2 :

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

주목할 점 : 하나의 패딩 비트는 2 개의 0 00과 같으므로 두 개의 패딩 비트는 4 개의 0 0000과 같습니다.

프로세스를 시작하겠습니다. -

1) 각 문자를 소수로 변환하십시오.

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"과 같은 두 개의 패딩 비트를 삽입합니다.

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

이제 동일합니다. 끝에서 두 개의 평등 표시가 4 개의 0이 추가되었다는 것을 보여줍니다 (디코딩에 도움이).

4) 이진을 10 진수로 계산하십시오.

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

5) Base64 차트를 사용하여 Base64에 대한 미밀 문자.

24 = y, 22 = w, 9 = j, 35 = j, 25 = z, 0 = a ==

"abcd"=> "ywjjza =="

베이스 64

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

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

Base64는 여러 목적으로 사용될 수 있습니다.

주된 이유는 이진 데이터를 통과 가능한 것으로 변환하는 것입니다.

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

참고 : 당신은 암호화에 그것을 사용할 수 있습니다. 사람들이 왜 당신이 할 수 없다고 말하는지, 그리고 암호화가 아니지만 쉽게 깨질 수 있고 눈살을 찌푸릴 것입니다. 암호화는 하나의 데이터 문자열을 나중에 해독 할 수있는 다른 데이터 문자열로 변환하는 것 이상을 의미합니다. 이것이 바로 Base64가하는 일입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top