shell脚本实现Base64加解密
暂时不支持中文字符
脚本:
#!/bin/bash
#
#####################################################################
#
#Author: LiangDong
#Email: 395539184@qq.com
#Date: 2021-04-23
#FileName: base64.sh
#URL: https://github.com/ledrsnet
#Description: base64加解码,暂不支持中文
#Copyright (C): 2021 All rights reserved
#
#####################################################################
#初始化base64编码表和索引表(解码使用)
baseCode=(`echo {A..Z} {a..z} {0..9} + /`)
declare -A baseIndexCode
for i in ${!baseCode[@]};do
baseIndexCode[${baseCode[$i]}]=$i
done
#错误码
ERR_NULLPARM=2
#base64编码
baseEncode(){
for((i=0;i<${#binaryStr};i+=24));do
buffers=${binaryStr:$i:24}
[ ${#buffers} -lt 24 ] && eqFlag=true
buffers+=`echo 000000000000000000000000|head -c $[24-${#buffers}]`
for((j=0;j<${#buffers};j+=6));do
tempBin=${buffers:$j:6}
#echo $tempBin
if [ $eqFlag = true ] && [ `echo "ibase=2;$tempBin"|bc` -eq 0 ];then
dataStr+="="
else
dataStr+=${baseCode[`echo "ibase=2;$tempBin"|bc`]}
fi
done
done
}
#base64解码
baseDecode(){
for((i=0;i<${#binaryStr};i+=8));do
buffers=${binaryStr:$i:8}
[ ${#buffers} -lt 8 ] && break;
dataStr+=`echo "ibase=2;$buffers"|bc|awk '{printf("%c"),$buffers}'`
done
}
#临时变量
binaryStr=""
dataStr=""
eqFlag=false
[ $# -lt 2 ] && { echo "Usage: `basename $0` str encode|decode ";exit $ERR_NULLPARM; }
#展开二进制位
for((i=0;i<${#1};i++));do
if [ "$2" = "encode" ];then
binaryStr+=$(echo "obase=2;`printf "%d" "'${1:$i:1}"`"|bc|xargs printf "%08d")
elif [ "$2" = "decode" ];then
[ ${1:$i:1} = "=" ] && continue
binaryStr+=$(echo "obase=2;${baseIndexCode[${1:$i:1}]}"|bc|xargs printf "%06d")
#echo ${baseIndexCode[${1:$i:1}]}
#echo $binaryStr
fi
done
#echo $binaryStr
#echo ${#binaryStr}
case "$2" in
"encode")
baseEncode
;;
"decode")
baseDecode
;;
*)
;;
esac
echo $dataStr
效果:
[root@maple-c8 ~]# ./base64.sh hahanihaoa encode
aGFoYW5paGFvYQ==
[root@maple-c8 ~]# ./base64.sh aGFoYW5paGFvYQ== decode
hahanihaoa
shell脚本实现Base64加解密的更多相关文章
- ✨Shell脚本实现Base64 加密解密
加密算法 # !/bin/bash # 全局变量 str="" base64_encode_string(){ # 源数据 source_string=$1 echo " ...
- java base64加解密
接上篇java Base64算法. 根据之前过程使用base64加解密,所以写成了工具类. 代码示例; public class Base64Util { private static Logger ...
- QuickBase64 - Android 下拉通知栏快捷base64加解密工具
Android Quick Setting Tile Base64 Encode/Decode Tool Android 下拉通知栏快捷 base64 加解密,自动将剪切板的内容进行 base64 E ...
- JAVA加解密 -- Base64加解密
Base64算法实现:可以将任意的字节数组数据,通过算法,生成只有(大小写英文.数字.+./)(一共64个字符)内容表示的字符串数据. private static final String str ...
- base64加解密字符串
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...
- oracle里面base64加解密
1. base64 的解密函数select utl_raw.cast_to_varchar2(utl_encode.base64_decode(utl_raw.cast_to_raw('dGVzdA= ...
- java之BASE64加解密
1.简介 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,采用Base64编码具有不可读性,即所编码的数据不会被人用肉眼所直接看到. 注:位于jdk的java.util包中. 2. ...
- Python AES - base64 加解密
首先python引用AES加密 from Crypto.Cipher import AES 需要先安装 Crypto 模块, 可以使用 easy_install 进行安装 会自动去官网进行搜索 ...
- 使用Apache的Base64类实现Base64加解密
包名称:org.apache.commons.codec.binary 类名称:org.apache.commons.codec.binary.Base64 1.Base64加密 public sta ...
- JavaScript Base64加解密
Base64加密算法是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045-RFC2049,上面有MIME的详细规范.Base64编码可用于在HTTP环境下传递较长的标识信 ...
随机推荐
- emmc寿命
EMMC器件寿命 1)先确认EMMC器件NAND FLASH类型,是MLC还是TLC,一般是TLC,器件手册标称1000-3000次,取平均值2000次作为评估: 2)在OS下查看EMMC器件当前使用 ...
- cf1632 Codeforces Round #769 (Div. 2)题解
A ABC 水题0.0 B Roof Construction 构造题,经过实验构造出了0的右边是不超过\(n\)的最大的\(2^k\rightarrow n\),左边是\(2^k-1,2^k-2,. ...
- MySQL精品学习资源合集 | 含学习教程笔记、运维技巧、图书推荐
MySQL凭借开源.免费.低门槛.稳定等优势,成为了当前最流行的关系型数据库之一.从1998年发行第一版以来,通过不断地更新迭代,MySQL被越来越多的公司使用,已然成为当下潮流. 为了帮助大家更好地 ...
- 墨天轮PostgreSQL精品学习资源合集(含基础手册、实操技巧&案例、书籍推荐)
近日,PostgreSQL 15 的第一个 beta 版本发布,这一最新版本在开发者体验.性能表现等方面都有提升.从最新的DB-Engines排名可以发现,PostgreSQL近十年来得分一路高涨,目 ...
- iOS中搜索框EVNCustomSearchBar使用小结
最近在项目开发中用到了搜索框,之前都是用的系统的searchbar,现有项目中用的是EVNCustomSearchBar,我试了一下还挺方便,下面说一下具体的用法. 第一步:引入添加相关的委托代理EV ...
- 关于自定义事件父子组件传值问题 $event
1.$event 是 vue 提供的特殊变量,用来表示原生的事件参数对象 event 1.1在原生事件中,$event是事件对象 可以点出来属性 2.在原生事件中,$event是事件对象,在自定义事件 ...
- dorado动态修改数据验证
view.get("#userDS.dataType").getPropertyDef("unitType").set("required" ...
- 强化学习训练过程中的过度拟合(overfitting)
相关: A.I. Learns to Drive From Scratch in Trackmania 本文讨论的是强化学习中的过度拟合问题,要知道强化学习中的过拟合和其他的监督.无监督学习的过拟合不 ...
- 总结:OI题目中常见的三种距离
设 \(A(x_1, y_1), B(x_2, y_2)\). 欧几里得距离 \[|AB| = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2} \] 一般模型:在一个坐标系上 ...
- 2025年前端面试准备html篇
时光飞逝,一晃已经工作了10年了,2014年一个人背着书包拉着箱子,下火车去做637路公交车的场景历历在目,637路公交车从起点坐到终点,开启了工作的第一站,这趟已经在路上行驶了10年的列车,经历多了 ...