Getting wrong Base64 encoded result in GO

Issue

I have the following hex data created by converting 5 values(consists of name, numeric and date field) to TLV

0115426f627320426173656d656e74205265636f726473020f3130303032353930363730303030330314323032322d30342d32355431353a33303a30305a040a323130303130302e393905093331353031352e3135

This hex data needs to be further encoded to Base64. I wrote the below code for that

func TLVsToBase64(v string) string { // v - the TLV in hex format
    
    encodedTLV := b64.StdEncoding.EncodeToString([]byte(v))
    return encodedTLV

}

The output(which is wrong) of the aforementioned hex data is below:

MDExNTQyNmY2MjczMjA0MjYxNzM2NTZkNjU2ZTc0MjA1MjY1NjM2ZjcyNjQ3MzAyMGYzMTMwMzAzMDMyMzUzOTMwMzYzNzMwMzAzMDMwMzMwMzE0MzIzMDMyMzIyZDMwMzQyZDMyMzU1NDMxMzUzYTMzMzAzYTMwMzA1YTA0MGEzMjMxMzAzMDMxMzAzMDJlMzkzOTA1MDkzMzMxMzUzMDMxMzUyZTMxMzU=

The desired output is:

ARVCb2JzIEJhc2VtZW50IFJlY29yZHMCDzEwMDAyNTkwNjcwMDAwMwMUMjAyMi0wNC0yNVQxNTozMDowMFoECjIxMDAxMDAuOTkFCTMxNTAxNS4xNQ==

I am new to Go, so please help me to troubleshoot the issue. I might missed something

Solution

Your input is the hexadecimal representation of some data. And your expected output is not the Base64 encoding of the UTF-8 data of the hex representation, but rather the data (the bytes) the hex encoding represent, so first decode the bytes e.g. using hex.DecodeString():

func TLVsToBase64(v string) (string, error) { // v - the TLV in hex format
    data, err := hex.DecodeString(v)
    if err != nil {
        return "", err
    }

    encodedTLV := base64.StdEncoding.EncodeToString(data)
    return encodedTLV, nil
}

Testing it:

s := "0115426f627320426173656d656e74205265636f726473020f3130303032353930363730303030330314323032322d30342d32355431353a33303a30305a040a323130303130302e393905093331353031352e3135"
fmt.Println(TLVsToBase64(s))

Output is what you expect (try it on the Go Playground):

ARVCb2JzIEJhc2VtZW50IFJlY29yZHMCDzEwMDAyNTkwNjcwMDAwMwMUMjAyMi0wNC0yNVQxNTozMDowMFoECjIxMDAxMDAuOTkFCTMxNTAxNS4xNQ== <nil>

Answered By – icza

Answer Checked By – David Goodson (GoLangFix Volunteer)

Leave a Reply

Your email address will not be published.