Implement a base64 encoder
This commit is contained in:
parent
d8b55a72c2
commit
bdd8fb3601
1 changed files with 28 additions and 0 deletions
28
rowbot
28
rowbot
|
@ -181,6 +181,34 @@ url() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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 "$encoded"
|
||||||
|
if [[ -t 1 ]]; then
|
||||||
|
printf \\n
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
###
|
###
|
||||||
# configure rowbot's environment
|
# configure rowbot's environment
|
||||||
###
|
###
|
||||||
|
|
Loading…
Reference in a new issue