[golang]命令行base64编解码东西
前语
最近经常用kubectl检查处理secret装备问题,由于secret的值都经过了base64编码,所以需求解码。假如不嫌切换界面费事的话,能够切阅读器用在线编解码东西。或许用linux一般自带的base64
指令来编解码。但这个base64
只承受文件输入和规范输入,有时候暂时做个编解码要经过规范输入传参比较费事,比方如下指令,多少有点费事
# 编码
echo -en 'qwer' | base64
# 解码
echo -en 'cXdlcg==' | base64 -d
# 编码多个字符串
for i in qwer asdf;do echo -en "${i}" |base64;done
示例代码
package main
import (
"encoding/base64"
"flag"
"fmt"
"os"
)
var (
isdecode bool
isseq bool
)
var usage string = `sb64, a simple base64 command line tool
Usage: sb64 [-d|-n] [string]`
func Process(source string, isdec bool) string {
var rst string
if !isdec {
rst = base64.URLEncoding.EncodeToString([]byte(source))
} else {
decrst, err := base64.URLEncoding.DecodeString(source)
if err != nil {
rst = "DecodeError"
} else {
rst = string(decrst)
}
}
return rst
}
func main() {
flag.BoolVar(&isdecode, "d", false, "decode mode")
flag.BoolVar(&isseq, "n", false, "print sequence number")
flag.Usage = func() {
fmt.Println(usage)
flag.PrintDefaults()
}
flag.Parse()
args := flag.Args()
if len(args) == 0 {
fmt.Println("Error: number of arguments is 0")
os.Exit(1)
}
for i, arg := range args {
seq := i + 1
if isseq {
fmt.Printf("%3d: %s\n", seq, Process(arg, isdecode))
} else {
fmt.Printf("%s\n", Process(arg, isdecode))
}
}
}
履行编译,将编译后的二进制文件放到PATH
环境变量的可履行目录下
运用
编码
$ sb64 hello world
aGVsbG8=
d29ybGQ=
解码
$ sb64 -d aGVsbG8= d29ybGQ=
hello
world