github.com/fff-chain/go-fff@v0.0.0-20220726032732-1c84420b8a99/global_config/utils/base58.go (about) 1 package utils 2 3 4 5 import ( 6 "bytes" 7 "math/big" 8 ) 9 10 11 var base58= []byte("123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz") 12 13 func Base58Encoding(str string) string { 14 strByte := []byte(str) 15 strTen := big.NewInt(0).SetBytes(strByte) 16 var modSlice []byte 17 for strTen.Cmp(big.NewInt(0)) > 0 { 18 mod:=big.NewInt(0) 19 strTen58:=big.NewInt(58) 20 strTen.DivMod(strTen,strTen58,mod) 21 modSlice = append(modSlice, base58[mod.Int64()]) 22 } 23 for _,elem := range strByte{ 24 if elem!=0{ 25 break 26 }else if elem == 0{ 27 modSlice = append(modSlice,byte('1')) 28 } 29 } 30 ReverseModSlice:=ReverseByteArr(modSlice) 31 return string(ReverseModSlice) 32 } 33 34 func ReverseByteArr(bytes []byte) []byte{ 35 for i:=0; i<len(bytes)/2 ;i++{ 36 bytes[i],bytes[len(bytes)-1-i] = bytes[len(bytes)-1-i],bytes[i] 37 } 38 return bytes 39 } 40 41 func Base58Decoding(str string) string { 42 strByte := []byte(str) 43 ret := big.NewInt(0) 44 for _,byteElem := range strByte{ 45 index := bytes.IndexByte(base58,byteElem) 46 ret.Mul(ret,big.NewInt(58)) 47 ret.Add(ret,big.NewInt(int64(index))) 48 } 49 return string(ret.Bytes()) 50 }