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  }