Skip to content

Instantly share code, notes, and snippets.

@uplime
Created June 12, 2026 17:24
Show Gist options
  • Select an option

  • Save uplime/e7e4ef0dda797b20a05fc29d2465467b to your computer and use it in GitHub Desktop.

Select an option

Save uplime/e7e4ef0dda797b20a05fc29d2465467b to your computer and use it in GitHub Desktop.
A base64 encoder written in Bash.
#!/usr/bin/env bash
b64_encode() {
local idx=0 numerics table_idxs table_idx encoded
local table=( {A..Z} {a..z} {0..9} + / )
for (( ; idx < ${#1}; idx+=3 )); do
read -ra numerics < <(
printf '%d %d %d\n' "'${1:idx:1}" "'${1:idx+1:1}" "'${1:idx+2:1}"
)
(( table_idxs[0] = numerics[0] >> 2 ))
(( table_idxs[1] = (( (numerics[0] & 0x03) << 6) | (numerics[1] & 0xF0) >> 2) >> 2 ))
(( table_idxs[2] = (( (numerics[1] & 0x0F) << 4) | (numerics[2] & 0xC0) >> 4) >> 2 ))
(( table_idxs[3] = numerics[2] & 0x3F ))
for table_idx in "${table_idxs[@]}"; do
encoded+=${table[$table_idx]}
done
done
if (( ${#1} % 3 == 1 )); then
encoded=${encoded::-2}==
elif (( ${#1} % 3 == 2 )); then
encoded=${encoded::-1}=
fi
printf '%s\n' "$encoded"
}
b64_encode "$1"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment