관련 메모에서 내가 만든 임의의 기본 변환을위한 기본 변환기가 있습니다. 즐겨!
https://convert.zamicol.com/
패딩 문자 란 무엇입니까?
패딩 문자는 길이 요구 사항을 충족하고 의미가 없습니다.
패딩의 10 진수 예 :
임의의 요구 사항이 모든 문자열의 길이가 8자인 경우 숫자 640은 "00000640"이라는 의미가 없기 때문에 선행 0을 패딩 문자로 사용하여이 요구 사항을 충족 할 수 있습니다.
바이너리 인코딩
바이트 패러다임 : 바이트는 사실상 표준 측정 단위이며 모든 인코딩 체계는 바이트와 다시 관련되어야합니다.
Base256 은이 패러다임에 정확히 맞습니다. 1 바이트는 base256의 한 문자와 같습니다.
16 진수 또는 16 진수 인 Base16 은 각 문자에 4 비트를 사용합니다. 1 바이트는 2 개의 base16 문자를 나타낼 수 있습니다.
Base64 는 base256 및 base16과 달리 바이트 패러다임에 균등하게 맞지 않습니다 (base32도 마찬가지). 모든 base64 문자는 전체 바이트보다 2 비트 짧은 6 비트로 표현할 수 있습니다.
base64 인코딩 대 바이트 패러다임을 분수로 나타낼 수 있습니다. 문자 당 6 비트, 바이트 당 8 비트 . 이 부분을 줄이면 4 자 이상 3 바이트입니다.
이 비율 (base64 문자 4 개당 3 바이트)은 base64를 인코딩 할 때 따르려는 규칙입니다. Base64 인코딩은 모든 바이트가 자체적으로 서있을 수있는 base16 및 base256과 달리 3 바이트 번들로만 측정 할 수 있습니다.
그렇다면 패딩 문자없이 인코딩이 잘 작동하더라도 패딩이 권장되는 이유 는 무엇입니까?
스트림의 길이를 알 수 없거나 데이터 스트림이 종료되는시기를 정확히 아는 것이 도움이 될 수있는 경우 패딩을 사용하십시오. 패딩 문자는 이러한 추가 스팟이 비어 있어야하며 모호함을 배제한다는 것을 명시 적으로 전달합니다. 패딩으로 길이를 알 수 없더라도 데이터 스트림이 끝나는 위치를 알 수 있습니다.
카운터 예로서 JOSE 와 같은 일부 표준 은 패딩 문자를 허용하지 않습니다. 이 경우 누락 된 항목이 있으면 암호화 서명이 작동하지 않거나 base64가 아닌 다른 문자 (예 : ".")가 누락됩니다. 길이에 대한 가정은 없지만, 뭔가 잘못되면 단순히 작동하지 않기 때문에 패딩이 필요하지 않습니다.
이것이 바로 base64 RFC가 말하는 것입니다.
경우에 따라 기본 인코딩 데이터에서 패딩 ( "=")을 사용할 필요가 없거나 사용되지 않습니다. 일반적으로 전송되는 데이터의 크기에 대한 가정을 할 수없는 경우 올바른 디코딩 된 데이터를 생성하기 위해 패딩이 필요합니다.
[...]
Base 64의 패딩 단계 [...]가 부적절하게 구현되면 인코딩 된 데이터가 중요하지 않게 변경됩니다. 예를 들어 입력이 기본 64 인코딩에 대해 하나의 옥텟 인 경우 첫 번째 심볼의 모든 6 비트가 사용되지만 다음 심볼의 처음 두 비트 만 사용됩니다. 이러한 패드 비트는 인코더를 준수하여 0으로 설정해야합니다. 이는 아래 패딩에 대한 설명에 설명되어 있습니다. 이 속성이 유지되지 않으면 기본 인코딩 된 데이터의 표준 표현이 없으며 여러 기본 인코딩 된 문자열을 동일한 이진 데이터로 디코딩 할 수 있습니다. 이 속성 (및이 문서에서 설명하는 다른 항목)이 유지되면 표준 인코딩이 보장됩니다.
패딩을 사용하면 손실 된 비트가 없다는 약속으로 base64 인코딩을 디코딩 할 수 있습니다. 패딩이 없으면 더 이상 3 바이트 번들로 측정하는 것에 대한 명시적인 승인이 없습니다. 패딩이 없으면 일반적으로 스택의 다른 곳 (예 : TCP, 체크섬 또는 기타 방법)에서 추가 정보 없이는 원래 인코딩의 정확한 재현을 보장 할 수 없습니다.
예
다음은 RFC 4648 양식의 예입니다 ( http://tools.ietf.org/html/rfc4648#section-8 ).
"BASE64"함수 내의 각 문자는 1 바이트 (base256)를 사용합니다. 그런 다음이를 base64로 변환합니다.
BASE64("") = "" (No bytes used. 0%3=0.)
BASE64("f") = "Zg==" (One byte used. 1%3=1.)
BASE64("fo") = "Zm8=" (Two bytes. 2%3=2.)
BASE64("foo") = "Zm9v" (Three bytes. 3%3=0.)
BASE64("foob") = "Zm9vYg==" (Four bytes. 4%3=1.)
BASE64("fooba") = "Zm9vYmE=" (Five bytes. 5%3=2.)
BASE64("foobar") = "Zm9vYmFy" (Six bytes. 6%3=0.)
다음은 사용할 수있는 인코더입니다. http://www.motobit.com/util/base64-decoder-encoder.asp