-
Notifications
You must be signed in to change notification settings - Fork 11
Open
Description
Which base62 implementations is this compatible with?
Reference Strings
For reference, I believe this is what base62 encoding and decoding should look like:
Raw : "Hello, 世界"
Base64: SGVsbG8sIOS4lueVjA (18 chars)
Base62: 1wJfrzvdbuFbL65vcS (18 chars)
Raw : "Hello World"
Base64: SGVsbG8gV29ybGQ (15 chars)
Base62: 73XpUgyMwkGr29M (15 chars)
Raw : [ 0, 0, 0, 0, 255, 255, 255, 255 ]
Base64: AAAAAP____8 (11 chars)
Base62: 000004gfFC3 (11 chars)
Raw : [ 255, 255, 255, 255, 0, 0, 0, 0 ]
Base64: _____wAAAAA (11 chars)
Base62: LygHZwPV2MC (11 chars)
Reference Implementation
I generated that using https://github.com/keybase/saltpack/encoding/basex, which seems to be correct and agree with other implementations, such as https://github.com/oconnor663/basex_gmp.
package main
import (
"encoding/base64"
"fmt"
"github.com/keybase/saltpack/encoding/basex"
)
func main() {
for _, src := range [][]byte{
[]byte("Hello, 世界"),
[]byte("Hello World"),
{0, 0, 0, 0, 255, 255, 255, 255},
{255, 255, 255, 255, 0, 0, 0, 0},
} {
// Uses the GMP character set "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
b62 := basex.Base62StdEncoding.EncodeToString(src)
b64 := base64.RawURLEncoding.EncodeToString(src)
fmt.Printf("Base64: %s (%d chars)\n", b64, len(b64))
fmt.Printf("Base62: %s (%d chars)\n", b62, len(b62))
fmt.Println("")
}
}
Metadata
Metadata
Assignees
Labels
No labels