Skip to content

Instantly share code, notes, and snippets.

@ma6174
Last active December 9, 2016 06:23
Show Gist options
  • Save ma6174/8142393 to your computer and use it in GitHub Desktop.
Save ma6174/8142393 to your computer and use it in GitHub Desktop.
url 安全的 base64 编码解码
package main
import (
"bufio"
"encoding/base64"
"flag"
"fmt"
"log"
"os"
)
var (
decodeTag = flag.Bool("d", false, "decode")
urlSafeTag = flag.Bool("u", false, "urlsafe")
)
func base64Encode(src []byte) string {
if *urlSafeTag {
return base64.URLEncoding.EncodeToString(src)
} else {
return base64.StdEncoding.EncodeToString(src)
}
}
func base64Decode(src string) ([]byte, error) {
if *urlSafeTag {
return base64.URLEncoding.DecodeString(src)
} else {
return base64.StdEncoding.DecodeString(src)
}
}
func do(str string) {
if *decodeTag {
after, err := base64Decode(str)
if err != nil {
log.Println(str, "\t", "Error:", err)
return
}
fmt.Println(str, "\t", string(after))
} else {
after := base64Encode([]byte(str))
fmt.Println(str, "\t", after)
}
}
var usage string = `
ubase64 - url safe base64 encode/decode data and print to standard output
usage:
ubase64 [-d] [-u] string
-d decode
-u url safe
- read from stdin
default:
encode and not url safe
`
func main() {
flag.Parse()
lenArgs := len(flag.Args())
if lenArgs == 0 {
fmt.Println(usage)
return
}
if flag.Arg(0) == "-" {
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
do(scanner.Text())
}
if err := scanner.Err(); err != nil {
log.Fatal(err)
}
} else {
for i := 0; i < lenArgs; i++ {
do(flag.Arg(i))
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment