Действия
Base64cp » История » Редакция 3
« Предыдущее |
Редакция 3/4
(Разница(diff))
| Следующее »
Андрей Волков, 2013-06-03 19:46
Передача бинарных файлов текстом¶
Декодировщик средствами bash¶
base64decode.sh
#!/bin/bash # Base64 decoding routine written entirely in bash, with no external dependencies. # # Usage: # base64decode < input > output # # This code is absurly inefficient; it runs aproximately 12,000 times slower than # the perl-based decoder. The difference is that this code doesn't require you to # install any external programs, which may be important in some cases. # # To decode using perl instead, use the following: # # base64decode() { # perl -e 'use MIME::Base64 qw(decode_base64);$/=undef;print decode_base64(<>);' # } # base64decode() { L=0 A=0 P=0 while read -n1 C ; do printf -v N %i \'"$C" if (( $N == 61 )) ; then P=$(( $P + 1 )) # = (padding) V=0 elif (( $N == 43 )) ; then V=62 # + elif (( $N == 47 )) ; then V=63 # / elif (( $N < 48 )) ; then continue elif (( $N < 58 )) ; then V=$(( $N + 4 )) # -48 + 52 (0-9) elif (( $N < 65 )) ; then continue elif (( $N < 91 )) ; then V=$(( $N - 65 )) # -65 + 0 (A-Z) elif (( $N < 97 )) ; then continue elif (( $N < 123 )) ; then V=$(( $N - 71 )) # -97 + 26 (a-z) else continue fi A=$(( ($A << 6) | $V )) L=$(( $L + 1 )) if [ $L == 4 ] ; then printf -v X "%x" $(( ($A >> 16) & 0xFF )) printf "\x$X" if (( $P < 2 )) ; then printf -v X "%x" $(( ($A >> 8) & 0xFF )) printf "\x$X" fi if (( $P == 0 )) ; then printf -v X "%x" $(( $A & 0xFF )) printf "\x$X" fi A=0 L=0 P=0 fi done } base64decode
Прием файла
read -d : data
Вставляем текст и нажимаем ":"
echo "${data}" > file.b64
. base64decode.sh < file.b64 > file.bin
Обновлено Андрей Волков больше 11 лет назад · 4 изменени(я, ий)