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环境下传递较长的标识信 ...
随机推荐
- PyTorch 的 Autograd
看了一篇博客,感觉写的很棒:PyTorch 的 Autograd
- 云原生周刊:一条 Kubernetes 命令引发的悲剧
开源项目 KSail 用于在 Docker 中配置支持 GitOps 的 K8s 集群的 CLI 工具. nginx-gateway-fabric NGINX Gateway Fabric 是一个开源 ...
- insufficient permission for adding an object to repository database .git/objects
1.出错截图: 有时候使用软件项目管理系统github时候,会出现一些问题截图如下: 2.出错原因 从出错的地方就知道是因为权限不足导致,回想一下,在链接远程服务器时候,不小心切换为管理员权限进行了g ...
- go: 在proto中使用oneof类型
在proto中,可以使用OneOf类型,使用一个字段存储不同类型的数据.类似go中的interface. 假设有proto如下,Val是一个OneOf数据类型,它可以为double/int/str.. ...
- vue数据异步加载!坑
"Error in render: "TypeError: Cannot read property '0' of undefined""渲染错误问题 搭建项目 ...
- luogu P3842 [TJOI2007] 线段
link 好题,考虑如何设定状态. 设\(dp_{i,0/1}\)表示到了第\(i\)行走完后停在这一行的最左侧/最右侧. 设定\(l_i\)表示这一行该线段的最左侧,\(r_i\)表示这一行的最右侧 ...
- games101_Homework7
实现完整的 Path Tracing 算法 需要修改这一个函数: • castRay(const Ray ray, int depth)in Scene.cpp: 在其中实现 Path Tracing ...
- Python之JSON用法解析
前景 Python编写HDFS服务安装的过程中,需要将构建好的JSON对象输出到文件,采用那种方式更便捷 方案1 open 函数 def writeExecCmdCheckActionsFile(se ...
- 鸿蒙NEXT开发案例:血型遗传计算
[引言] 血型遗传计算器是一个帮助用户根据父母的血型预测子女可能的血型的应用.通过选择父母的血型,应用程序能够快速计算出孩子可能拥有的血型以及不可能拥有的血型.这个过程不仅涉及到了简单的数据处理逻辑, ...
- 利用sqlmapapi和google-hacking联动自动化sql注入探测
利用inurl语法搜索+sqlmap梭哈挖到过一点sql注入,这不失为一种好方法. 但是现在的sql注入漏洞的网站是比较少的了,所以这样一个个手工测,不仅效率低,还不一定有什么收获.不妨写一个goog ...