go 语言中的Base64加密

臭大佬 2020-11-05 20:48:55 2104
Go 
简介 go 语言中的Base64加密

Base64是一种任意二进制到文本字符串的编码方法,常用于在URL、Cookie、网页中传输少量二进制数据。

首先使用Base64编码需要一个含有64个字符的表,这个表由大小写字母、数字、+和/组成。采用Base64编码处理数据时,会把每三个字节共24位作为一个处理单元,再分为四组,每组6位,查表后获得相应的字符即编码后的字符串。编码后的字符串长32位,这样,经Base64编码后,原字符串增长1/3。如果要编码的数据不是3的倍数,最后会剩下一到两个字节,Base64编码中会采用\x00在处理单元后补全,编码后的字符串最后会加上一到两个 = 表示补了几个字节。

/*
 * @Description:
 * @User: Vijay <1937832819@qq.com>
 * @Date: 2020-08-18 21:44:11
 */
package main

import (
    "encoding/base64"
    "fmt"
    "reflect"
    "unsafe"
)

/**
 * @Description: 加密函数
 * @User: Vijay <1937832819@qq.com>
 * @Date: 2020-11-05 20:46:48
 * @param {string} data
 * @return {*}
 */
func Encode(data string) string {
    content := *(*[]byte)(unsafe.Pointer((*reflect.SliceHeader)(unsafe.Pointer(&data))))
    coder := base64.NewEncoding(getBase64Table())
    return coder.EncodeToString(content)
}

/**
 * @Description: 解密函数
 * @User: Vijay <1937832819@qq.com>
 * @Date: 2020-11-05 20:47:01
 * @param {string} data
 * @return {*}
 */
func Decode(data string) string {
    coder := base64.NewEncoding(getBase64Table())
    result, _ := coder.DecodeString(data)
    return *(*string)(unsafe.Pointer(&result))
}

/**
 * @Description: Base64表
 * @User: Vijay <1937832819@qq.com>
 * @Date: 2020-11-05 20:47:11
 * @param {*}
 * @return {*}
 */
func getBase64Table() string {
    str := "IJjkKLMNO567PQX12RVW3YZaDEFGbcdefghiABCHlSTUmnopqrxyz04stuvw89+/"
    return str
}

func main() {
    strTest := "choudalao"
    strEncrypt := Encode(strTest)
    strDecrypt := Decode(strEncrypt)
    fmt.Println("Encrypted:", strEncrypt)
    fmt.Println("Decrypted:", strDecrypt)
}