Base64 1.Base64就是一种基于64个可打印的字符来表示二进制数据的方法 Base64使用了26个字母、26个大写字母、10个数字以及两个符号(+、/),用语在电子邮件这样的基于文本的媒介中传输二进制数据。 Base64通常用于编码邮件中的附件。 2.Base64的步骤 将每个字符转成ASCII编码(10进制) 将10进制编码转成2进制编码 将2进制编码按照6位一组进行平分 将6位一组的2进制数进行高位补零,然后转成10进制 将10进制数作为索引,从Base64编码表中查找字符 将3个字符的文本将编码为4个字符长度 3.Go实现Base64加密解密 package main import ( "encoding/base64" "fmt" ) func main()? { str := "Oneck" res := Base64EncodeString(str) fmt.Println(res); res1 := Base64DecodeString(res) fmt.Println(res1) } func Base64EncodeString(str string) string { return base64.StdEncoding.EncodeToString([]byte(str)) } func Base64DecodeString(str string) string { result,_ := base64.StdEncoding.DecodeString(str) return string(result) } Base58 1.Base58是一种基于文本的二进制编码而是,用在比特币和其他的加密货币中 2.Base58是Base64编码格式的子集,同样适用大小写和10个数字,但是舍弃了一些容易错读和在特定字体中易混淆的字符 Base58不含Base64中的0、Oo、lL、1以及+、/,目的就是为了去除容易混淆的字符。 简而言之,Base58就是不含(O0l1+/)的大小写和数字组成 3.Base58的编码步骤: 将数组对58取模,得到商和模,然后不断用商对58取模,知道商为0。将所有的模作为索引下标,获取其在base58字符集中的字符,左后大小端进行颠倒 package main import ( "bytes" "fmt" "math/big" ) var base58List = []byte("123456789ABCDEFGHJKMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz") func main()? { str := "peter" _,res := Base58Encode([]byte(str)) fmt.Println(res) _,res = Base58Decode([]byte(res)) fmt.Println(res) } func Base58Encode(input[]byte) ([]byte,string) { z := big.NewInt(0).SetBytes(input) fmt.Println("z=",z) base := big.NewInt(58) zero := big.NewInt(0) mod := &big.Int{} var result []byte fmt.Println("开始循环------------") for z.Cmp(zero) != 0 { z.DivMod(z,base,mod) fmt.Println("mod=",mod) fmt.Println("z=",z) result = append(result,base58List[mod.Int64()]) fmt.Println("result=",fmt.Sprintf("%s",result)) fmt.Println("循环结束") } fmt.Println("整个循环结束-------------") ReverseBytes(result) return result,fmt.Sprintf("%s",result) } func Base58Decode(input []byte) ([]byte,string) { result := big.NewInt(0) for _,b :=range input { charIndex := bytes.IndexByte((base58List),b) result.Mul(result,big.NewInt(58)) result.Add(result,big.NewInt(int64(charIndex))) } decode := result.Bytes() if input[0] == base58List[0] { decode = append([]byte{0X00},decode...) } return decode,string(decode) } func ReverseBytes(data[]byte)? { for i,j := 0, len(data) - 1 ; i < j ; i,j = i + 1,j - 1? { data[i],data[j] = data[j],data[i] //fmt.Println(i,j) //break } } 版权声明:本文为CSDN博主「Oneck_peter」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_45828877/article/details/103997621 —- 编译者/作者:区块新趋势 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
Base64、Base58原理及GO实现其加密解密
2020-01-17 区块新趋势 来源:区块链网络
- 上一篇:火币HT
- 下一篇:Wasabi-用户隐私的极致
LOADING...
相关阅读:
- 塞拉预售的协同效应是活的2020-08-03
- 牛市的狂欢已开启,牛市真的来了吗?2020-08-03
- 到昨天,来币乎51天,更文49篇,终于从零开始撸到第一个100万key,望再2020-08-03
- OKEx上线Filecoin在预警什么?2020-08-03
- 李宁快报:火币集团成立DeFi实验室,比特币能否重回巅峰2020-08-03