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环境下传递较长的标识信 ...
随机推荐
- src 和 href 的区别?
src:都是引用资源 src:指向外部资源的位置 , 当浏览器解析到此元素时,会暂停其它资源的下载和处理 , 直到将该资源加载 , 编译 , 执行完毕 ,相当于将资源嵌入到文档中当前元素的所在的位置: ...
- ADO.NET 和 ORM的区别
ADO: 1 大量的Sql语句-业务不同,Sql语句不同 2 需要根据不同的场景编写不同Sql语句-灵活去编写Sql语句-提前优化Sql 语句-提供高性能的Sql语句 3 不适合快速开发 4 可编程性 ...
- manim边做边学--直角平面
直角平面NumberPlane是Manim库中用于创建二维坐标平面的对象,它可以帮助用户在场景中可视化坐标轴以及网格线. 通过坐标轴.网格线以及刻度,它能够动态地展示函数曲线.几何图形以及它们的变换过 ...
- 乐观锁CAS
在 Java 中,我们可以使用 synchronized 关键字和 CAS 来实现加锁效果. 悲观锁: 对于悲观锁来说,它总是认为每次访问共享资源时会发生冲突,所以必须对每次数据操作加上锁,以保证临界 ...
- 使用wxpython开发跨平台桌面应用,对wxpython控件实现类似C#扩展函数处理的探究
本人之前对C#开发非常喜欢,也从事开发C#开发桌面开发.Web后端.Vue前端应用开发多年,最近一直在研究使用Python,希望能够把C#的一些好的设计模式.开发便利经验引入到Python开发中,很多 ...
- .NET 全能高效的 CMS 内容管理系统
前言 推荐一款强大的企业级工具 - SSCMS 内容管理系统. SSCMS 为企业级客户设计,完全开源免费,适用于商业用途且无需支付任何产品或授权费用. 本文将详细介绍 SSCMS 系统的功能.用户界 ...
- 经典C语言题目——打印罗汉塔图形
打印如下图形: ++++1 +++22 ++333 +4444 55555 点击查看代码 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> ...
- RL 基础 | 如何使用 OpenAI Gym 接口,搭建自定义 RL 环境(详细版)
参考: 官方链接:Gym documentation | Make your own custom environment 腾讯云 | OpenAI Gym 中级教程--环境定制与创建 知乎 | 如何 ...
- HttpWebRequest调用API
public void HttpWebRequestPost(){ string responseContent = string.Empty; var userNameAndPwd = new { ...
- 干货分享:通用加解密函数(crypto),Air780E篇
一.加解密概述 加解密算法是保证数据安全的基础技术,无论是在数据传输.存储,还是用户身份验证中,都起着至关重要的作用.随着互联网的发展和信息安全威胁的增加,了解并掌握常用的加解密算法已经成为开发者和安 ...