纯shell程序实现base64编码

/******************************************************************************************
*              版权声明
*   本文为本人原创,本人拥有此文的版权。鉴于本人持续受益于开源软件社区,
* 本人声明:任何个人及团体均可不受限制的转载和复制本文,无论是否用于盈利
* 之目的,但不得修改文章内容,并必须在转载及复制时同时保留本版权声明,否
*   则为侵权行为,本人保留追究相应主体法律责任之权利。
*               speng2005@gmail.com
*                  2015-11
******************************************************************************************/

纯shell程序实现base64编码,使用常规的加减乘除算法实现。有兴趣的也可以使用类似let "ret=mask&byte"语句直接使用位运算来改造此算法。

base64_encode_string()
{
        source_string=$1
        if [ 0 -eq ${#source_string} ]; then
                return
        fi

        BASE64_CODE_TABLE=(A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 + /)

        # first base64 byte's bit-mask from source byte is [byte No 1]11111100
        # second base64 byte's bit-mask from source byte is [byte No 1]00000011 and [byte No 2]11110000
        # third base64 byte's bit-mask from source byte is [byte No 2]00001111 and [byte No 3]11000000
        # fourth base64 byte's bit-mask from source byte is [byte No 3]00111111
        FIRST_SOURCE_BYTE_DIVIDEND=0x04
        SECOND_SOURCE_BYTE_DIVIDEND=0x10
        THIRD_SOURCE_BYTE_DIVIDEND=0x40

        #encode_state can be: 1, 2, or 3, which indicate the encoding-process order in soure string
        encode_state=1
        last_source_byte=""
        result=""
        for (( i = 0; i < ${#source_string}; ++i ))
        {
                curChar=`printf "%d" "'${source_string:i:1}";`
                #echo curChar=$curChar

                case $encode_state in
                1)
                        index=$(( $curChar / $FIRST_SOURCE_BYTE_DIVIDEND ))
                        #echo "index in state 1 is: $index"
                        result="$result${BASE64_CODE_TABLE[$index]}"
                        encode_state=2;;
                2)
                        index_high=$(( ($last_source_byte % $FIRST_SOURCE_BYTE_DIVIDEND) * 0x10 ))
                        index_low=$(( $curChar / $SECOND_SOURCE_BYTE_DIVIDEND ))
                        index=$(( $index_high + $index_low ))
                        #echo "index in state 2 is: $index"
                        result="$result${BASE64_CODE_TABLE[$index]}"
                        encode_state=3;;
                3)
                        index_high=$(( ($last_source_byte % $SECOND_SOURCE_BYTE_DIVIDEND) * 0x04 ))
                        index_low=$(( $curChar / $THIRD_SOURCE_BYTE_DIVIDEND ))
                        index=$(( $index_high + $index_low ))
                        #echo "index1 in state 3 is: $index"
                        result="$result${BASE64_CODE_TABLE[$index]}"
                        index=$(( $curChar % $THIRD_SOURCE_BYTE_DIVIDEND ))
                        #echo "index2 in state 3 is: $index"
                        result="$result${BASE64_CODE_TABLE[$index]}"
                        encode_state=1;;
                esac
                last_source_byte=$curChar
        }

        # process pading
        case $encode_state in
        2)
                index=$(( ($last_source_byte % $FIRST_SOURCE_BYTE_DIVIDEND) * 0x10 ))
                #echo "index in pading state 2 is: $index"
                result="$result${BASE64_CODE_TABLE[$index]}==";;
        3)
                index=$(( ($last_source_byte % $SECOND_SOURCE_BYTE_DIVIDEND) * 0x04 ))
                #echo "index in pading state 3 is: $index"
                result="$result${BASE64_CODE_TABLE[$index]}=";;
        esac

        echo $result
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值