Skip to content

Instantly share code, notes, and snippets.

@mndrix
Created November 2, 2015 21:54
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save mndrix/b2494ebefd916c71ded5 to your computer and use it in GitHub Desktop.
Save mndrix/b2494ebefd916c71ded5 to your computer and use it in GitHub Desktop.
Add padding characters to base32 encoded data
package main
import (
"encoding/base32"
"fmt"
"strings"
)
func main() {
data := "2246b2egzcc3ktvvoklo5cvzh4"
// add padding characters
padding := ""
switch len(data) % 8 {
case 2:
padding = "======"
case 4:
padding = "===="
case 5:
padding = "==="
case 7:
padding = "=="
}
data = data + padding
data = strings.ToUpper(data)
bytes, err := base32.StdEncoding.DecodeString(data)
if err != nil {
fmt.Printf("oops: %s\n", err)
}
fmt.Println(bytes)
data = base32.StdEncoding.EncodeToString(bytes)
fmt.Println(data)
}
@mndrix
Copy link
Author

mndrix commented May 27, 2017

Thank you past self. I searched for "base32 padding" and found my old Gist.

@jmhodges
Copy link

jmhodges commented Jul 6, 2017

Hey, just ran across this. Are you sure the 7 case shouldn't be just one '='?

@hatRiot
Copy link

hatRiot commented Jan 16, 2019

(8 - (len(data) % 8)) % 8 is more accurate/concise.

>>> from base64 import b32encode
>>> b32encode(b"A")
b'IE======'
>>> (8 - (len("IE") % 8)) % 8
6
>>> b32encode(b"AA")
b'IFAQ===='
>>> (8 - (len("IFAQ") % 8)) % 8
4
>>> b32encode(b"AAA")
b'IFAUC==='
>>> (8 - (len("IFAUC") % 8)) % 8
3
>>> b32encode(b"AAAA")
b'IFAUCQI='
>>> (8 - (len("IFAUCQI") % 8)) % 8
1
>>> b32encode(b"AAAAA")
b'IFAUCQKB'
>>> (8 - (len("IFAUCQKB") % 8)) % 8
0
>>> 

@HacKanCuBa
Copy link

(8 - (len(data) % 8)) % 8 is more accurate/concise.

>>> from base64 import b32encode
>>> b32encode(b"A")
b'IE======'
>>> (8 - (len("IE") % 8)) % 8
6
>>> b32encode(b"AA")
b'IFAQ===='
>>> (8 - (len("IFAQ") % 8)) % 8
4
>>> b32encode(b"AAA")
b'IFAUC==='
>>> (8 - (len("IFAUC") % 8)) % 8
3
>>> b32encode(b"AAAA")
b'IFAUCQI='
>>> (8 - (len("IFAUCQI") % 8)) % 8
1
>>> b32encode(b"AAAAA")
b'IFAUCQKB'
>>> (8 - (len("IFAUCQKB") % 8)) % 8
0
>>> 

big thanks!!

@msudgh
Copy link

msudgh commented Feb 14, 2023

TS version

/**
 * Add Base32 Padding
 *
 * @link https://gist.github.com/mndrix/b2494ebefd916c71ded5
 * @return {string}
 */
export const addBase32Padding = (data: string): string => {
  let padding = '';

  switch (data.length % 8) {
    case 2:
      padding = '======';
      break;
    case 4:
      padding = '====';
      break;
    case 5:
      padding = '===';
      break;
    case 7:
      padding = '=';
      break;
  }

  return data + padding;
};

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment