调用base64.StdEncoding.DecodeString时,24个字符的字符串有什么特别之处
24个字符长的字符串有什么特别之处调用base64.StdEncoding.DecodeString时,24个字符的字符串有什么特别之处,string,go,base64,String,Go,Base64,24个字符长的字符串有什么特别之处 package main import ( "encoding/base64" "fmt" ) func main() { data := []string{"24CharacterStringppppppp", "aaaaaaaaaaaaaaaaaaaaaaaa", "25CharacterStringpppppppp", &quo
package main
import (
"encoding/base64"
"fmt"
)
func main() {
data := []string{"24CharacterStringppppppp", "aaaaaaaaaaaaaaaaaaaaaaaa", "25CharacterStringpppppppp", "23CharacterStringpppppp", "qwertyuiop"}
for _, d := range data {
_, err := base64.StdEncoding.DecodeString(d)
if err != nil {
fmt.Printf("Failed to decode base 64 string %v, err: %v \n", d, err.Error())
} else {
fmt.Printf("No Error\n")
}
}
}
我偶然发现,任何24个字符长的字符串在调用base64.StdEncoding.DecodeString
任何其他长度的字符串时都不会生成错误
我错过了什么?
因为Base64是一种六位编码,并且因为在现代计算机上解码的值被划分为8位八位组,Base64编码文本(4个六位组=46=24位)的每四个字符代表未编码文本或数据的三个八位组(3个八位组=38=24位)这意味着当未编码输入的长度不是三的倍数时,编码输出必须添加填充,以便其长度是四的倍数。
24是4的倍数,但23或25不是。但如果再添加4个字符,28也是4的倍数,也不会产生错误
例如,这些输入都会生成“无错误”(请在上尝试):
衬垫。你错过了[padding]()这个令人惊讶的例子!就我所关心的问题而言,base64的这个级别已经为我抽象了。我从中学到了一些东西:)一个可爱的(简洁的)例子,包含了很多知识。干杯
data := []string{"", "1234", "12345678", "123456789012"}