diff --git a/strutil/encode.go b/strutil/encode.go index d5fab1b4e..06e2ed043 100644 --- a/strutil/encode.go +++ b/strutil/encode.go @@ -94,14 +94,20 @@ func URLDecode(s string) string { // -------------------- base encode -------------------- // +// base32 encoding with no padding +var ( + B32Std = base32.StdEncoding.WithPadding(base32.NoPadding) + B32Hex = base32.HexEncoding.WithPadding(base32.NoPadding) +) + // B32Encode base32 encode func B32Encode(str string) string { - return base32.StdEncoding.EncodeToString([]byte(str)) + return B32Std.EncodeToString([]byte(str)) } // B32Decode base32 decode func B32Decode(str string) string { - dec, _ := base32.StdEncoding.DecodeString(str) + dec, _ := B32Std.DecodeString(str) return string(dec) } diff --git a/strutil/encode_test.go b/strutil/encode_test.go index 2cc967a39..fb5f31873 100644 --- a/strutil/encode_test.go +++ b/strutil/encode_test.go @@ -2,6 +2,7 @@ package strutil_test import ( "testing" + "time" "github.com/gookit/goutil/strutil" "github.com/gookit/goutil/testutil/assert" @@ -41,8 +42,12 @@ func TestURLEnDecode(t *testing.T) { func TestBaseDecode(t *testing.T) { is := assert.New(t) - is.Eq("MFRGG===", strutil.B32Encode("abc")) - is.Eq("abc", strutil.B32Decode("MFRGG===")) + is.Eq("GEZGCYTD", strutil.B32Encode("12abc")) + is.Eq("12abc", strutil.B32Decode("GEZGCYTD")) + + // b23 hex + is.Eq("64P62OJ3", strutil.B32Hex.EncodeToString([]byte("12abc"))) + is.Eq("68O34CPG70P3IC9M6GO32CO", strutil.B32Hex.EncodeToString([]byte(time.Now().Format("20060102150405")))) is.Eq("YWJj", strutil.B64Encode("abc")) is.Eq("abc", strutil.B64Decode("YWJj"))