Here is an example how to decode base64 encoded strings https://play.golang.org/p/iojjUKwvZvn
It uses encoding packages encoding/base64 and encoding/hex .
package main
import (
"fmt"
"encoding/base64"
"encoding/hex"
)
func isAscii7printable(bytes []byte)(bool){
for _, b := range bytes {
if b < 32 || b > 127 {
return false
}
}
return true
}
func main() {
b64 := "QUJD" //ABC
b64 = "QUJD-" //illegal base64 data at input byte 4
b64 = "QUIK" //AB\n
bytes, err := base64.StdEncoding.DecodeString(b64)
if err != nil {
fmt.Println("Input string `", b64, "`has an error: ", err.Error())
return
}
hexBytes := make([]byte, hex.EncodedLen(len(bytes)))
hex.Encode(hexBytes, bytes)
fmt.Println("Decoding base64 encoded strings")
fmt.Println("===============================")
fmt.Printf("Base64: %s\n", b64)
fmt.Printf("Length: %d bytes; %d bits\n", len(bytes), 8*len(bytes))
fmt.Printf("Hex : %s \n", hexBytes)
if isAscii7printable(bytes) {
fmt.Println("String: "+string(bytes))
} else {
fmt.Println("There are non ASCII7 characters.")
}
}
Output could be:
Decoding base64 encoded strings
===============================
Base64: QUIK
Length: 3 bytes; 24 bits
Hex : 41420a
There are non ASCII7 characters.
Or after commenting two b64 lines:
Decoding base64 encoded strings
===============================
Base64: QUJD
Length: 3 bytes; 24 bits
Hex : 414243
String: ABC
For decoding non printable characters is good to use hex.Dump, see https://play.golang.org/p/f6fQpbqeHo8
package main
import (
"fmt"
"encoding/base64"
"encoding/hex"
)
func b64print(b64 string) {
bytes, err := base64.StdEncoding.DecodeString(b64)
fmt.Printf("Base64 : %s\n", b64)
if err != nil {
fmt.Printf("Input string '%s' has an error: %s\n\n", b64, err.Error())
return
}
fmt.Printf("Decoded: length: %d bytes ~ %d bits, `hexdump -C` format:\n", len(bytes), 8*len(bytes))
fmt.Printf("%s\n", hex.Dump(bytes))
}
func main() {
fmt.Println("Decoding base64 encoded strings")
fmt.Printf("===============================\n\n")
b64print("wrong")
b64print("SGVsbG8gV29ybGQh")
b64print("VGFsbCByZWQgdHJlZSBvbiB0aGUgcml2ZXIgYmFuay4=")
b64print("QSBsYXp5IGZveCBqdW1wcyBvdmVyIHF1aWNrIGJyb3duIGRvZyEgRW1haWw6dTEwQG15LmV4YW1wbGUub3JnIA==")
}
Here is an output:
Decoding base64 encoded strings
===============================
Base64 : wrong
Input string 'wrong' has an error: illegal base64 data at input byte 4
Base64 : SGVsbG8gV29ybGQh
Decoded: length: 12 bytes ~ 96 bits, `hexdump -C` format:
00000000 48 65 6c 6c 6f 20 57 6f 72 6c 64 21 |Hello World!|
Base64 : VGFsbCByZWQgdHJlZSBvbiB0aGUgcml2ZXIgYmFuay4=
Decoded: length: 32 bytes ~ 256 bits, `hexdump -C` format:
00000000 54 61 6c 6c 20 72 65 64 20 74 72 65 65 20 6f 6e |Tall red tree on|
00000010 20 74 68 65 20 72 69 76 65 72 20 62 61 6e 6b 2e | the river bank.|
Base64 : QSBsYXp5IGZveCBqdW1wcyBvdmVyIHF1aWNrIGJyb3duIGRvZyEgRW1haWw6dTEwQG15LmV4YW1wbGUub3JnIA==
Decoded: length: 64 bytes ~ 512 bits, `hexdump -C` format:
00000000 41 20 6c 61 7a 79 20 66 6f 78 20 6a 75 6d 70 73 |A lazy fox jumps|
00000010 20 6f 76 65 72 20 71 75 69 63 6b 20 62 72 6f 77 | over quick brow|
00000020 6e 20 64 6f 67 21 20 45 6d 61 69 6c 3a 75 31 30 |n dog! Email:u10|
00000030 40 6d 79 2e 65 78 61 6d 70 6c 65 2e 6f 72 67 20 |@my.example.org |