调用base64.StdEncoding.DecodeString时,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

24个字符长的字符串有什么特别之处

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"}