[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
posted @ 2024-11-23 17:31  花酒锄作田  阅读(27)  评论(0编辑  收藏  举报