[Go] base64의 4가지 인코딩 방법의 차이점을 정리합니다.
encoding/base64
는 다음과 같은 4가지 인코딩 방식을 정의했다.차이점
결론은 다음과 같다.
모드
기호
채우기
StdEncoding
+ 및/
있다
URLEncoding
- 및
있다
RawStdEncoding
+ 및/
없음
RawURLEncoding
- 및
없음
package main
import (
"encoding/base64"
"fmt"
)
func main() {
b := []byte("Hello, セカイ")
s1 := base64.StdEncoding.EncodeToString(b)
fmt.Println(s1) // SGVsbG8sIOOCu+OCq+OCpA==
s2 := base64.URLEncoding.EncodeToString(b)
fmt.Println(s2) // SGVsbG8sIOOCu-OCq-OCpA==
s3 := base64.RawStdEncoding.EncodeToString(b)
fmt.Println(s3) // SGVsbG8sIOOCu+OCq+OCpA
s4 := base64.RawURLEncoding.EncodeToString(b)
fmt.Println(s4) // SGVsbG8sIOOCu-OCq-OCpA
}
StdEnding과 URLEncoding의 차이점
URL Safe는
URLEncoding
입니다.Base64 예a~z
용 26자A~Z
용 26자0~9
의 10자+
및 /
2자+
과 /
의 정의는 기본 64encoding이고 Go에서 StdEncoding
로 정의되었다.한편,
+
와/
는 URL 등에서 URL 세이프가 아닌 특별한 의미를 가진다.그것 대신+
-
/
입니다.Raw Enceoding과 Raw Enceoding의 차이점
채우지 않은 것은
_
와URLEncoding
입니다.이 두 정의는 다음과 같다.var RawStdEncoding = StdEncoding.WithPadding(NoPadding)
var RawURLEncoding = URLEncoding.WithPadding(NoPadding)
기본 64의 충전은 인코딩 후 문자열의 길이가 4의 배수에 이르지 않을 때 4의 배수를 부여한다.기호 사용RawStdEncoding
.채우기는 문자열의 길이를 조절하기 위해 추가된 것이기 때문에 채우지 않아도 데이터 분실이 발생하지 않습니다.RFC의 다음 섹션에 (참조)라고 쓰여 있는 이유는 무엇입니까?
In some circumstances, the use of padding ("=") in base-encoded data
is not required or used. In the general case, when assumptions about
the size of transported data cannot be made, padding is required to
yield correct decoded data.
데이터의 큰 시간을 추정할 수 없을 때'데이터의 세그먼트'를 명확히 표시하기 위해 필요하다는 것이다.데이터 길이는 어느 정도 예측할 수 있는 상황에서 채울 필요가 없다.
참고 자료
Reference
이 문제에 관하여([Go] base64의 4가지 인코딩 방법의 차이점을 정리합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/senk/articles/674e720b6a8700텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)