✨Shell脚本实现Base64 加密解密
加密算法
# !/bin/bash
# 全局变量
str=""
base64_encode_string(){
# 源数据
source_string=$1
echo "源数据:$1"
# 判断是否为空
if [ 0 -eq "${#source_string}" ]; then
echo "输入为空,退出"
return
fi
echo "正在执行..."
# 编码集Wnrm0b7QPpI1FGBYVizZXN84vTJqocOuD9aHdgSlt2jRyAKEe6kCxhsfwL5M3U+/
BASE64_CODE_TABLE=(W n r m 0 b 7 Q P p I 1 F G B Y V i z Z X N 8 4 v T J q o c O u D 9 a H d g S l t 2 j R y A K E e 6 k C x h s f w L 5 M 3 U + /)
# 不知道
FIRST_SOURCE_BYTE_DIVIDEND=0X04
SECOND_SOURCE_BYTE_DIVIDEND=0X10
THIRD_SOURCE_BYTE_DIVIDEND=0X40
# 标记
encode_state=1
#
last_source_byte=""
# 结果
result=""
# 将字符转化成ASCII码值
for((i=0;i<${#source_string};++i)){
#curChar='printf "%d" "${#source_string:i:1}";'
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]}"
echo "结果:" $result
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]}"
echo "结果:$result"
encode_state=3;;
3)
index_high=$(( ($last_source_byte % $SECOND_SOURCE_BYTE_DIVIDEND) * 0X04 ))
index_low=$(( $curChar / $THIRD_SOURCE_BYTE_DIVIDEND ))
index=$(( $curChar % $THIRD_SOURCE_BYTE_DIVIDEND ))
# echo "index2 in state 3 is: $index"
result="$result${BASE64_CODE_TABLE[$index]}"
echo "结果:$result"
# 追加最后一位
index=$(( $curChar % 0x10 ))
result="$result${BASE64_CODE_TABLE[$index]}"
echo "追加结果:$result"
encode_state=1;;
esac
last_source_byte=$curChar
}
# process pading
case $encode_state in
2)
echo $FIRST_BYTE_DIVIDEND
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"
str=$result
}
# main函数
echo "开始加密..."
read m
echo $m
read n
# 第二种
echo "-------------------"
cat $1 |while read line
do
from=$line
base64_encode_string $from
#str=$?
# echo "输出:" $str
# 写入文件
echo "$str" >> to
done
# 加密
# 写入文件
#base64_encode_string $1
echo "加密结束..."
解密算法
# !/bin/bash
# 全局变量
str=""
_str=""
# 编码集Wnrm0b7QPpI1FGBYVizZXN84vTJqocOuD9aHdgSlt2jRyAKEe6kCxhsfwL5M3U+/
BASE64_CODE_TABLE=(W n r m 0 b 7 Q P p I 1 F G B Y V i z Z X N 8 4 v T J q o c O u D 9 a H d g S l t 2 j R y A K E e 6 k C x h s f w L 5 M 3 U + /)
# 16#---->ascii
fun(){
a=$1
b=`printf "%d" $a`
#echo $b |awk '{printf("%c", $1)}'
_str=`echo $b |awk '{printf("%c", $1)}'`
}
# 四个字符转化为正确的三个字符
get(){
# get
get=$1
echo "数据源" $1
# to
to=""
# size
size=4
if [[ $2 = 1 ]]; then
size = 3
elif [[ $2 = 2 ]]; then
size =2
fi
for((i=0;i<size;++i))do
# echo "循环I:$i ${get:i:1}"
for((j=0;j<64;j++))do
# echo "当前:$j ${BASE64_CODE_TABLE[$j]}"
if [[ ${get:i:1} = ${BASE64_CODE_TABLE[$j]} ]]; then
if [[ i < size-1 ]];then
to=$(( ($to + $j)* 0x10))
# 此时为十进制
echo "匹配:$i $j $to ${get:i:1}"
else
to=$(($to + $j))
fi
break
fi
done
done
get=""
# 十进制转化为十六进制
echo "十六进制结果" $to
if [[ size = 1 ]]; then
to=$to/0x04
tmp=$to / 0x100
tmp="\x${tmp}"
tmp=`printf "$tmp"`
to=$to >> 8
tmp="\x${to}"
tmp=`printf "$tmp"`
get=$get $tmp
elif [[ size = 2 ]]; then
to=$to/0x10
tmp="\x${to}"
tmp=`printf "$tmp"`
get=$get $tmp
else
printf "%d" $(( ($to / 65536) ))
tmp=$(( ($to / 65536) ))
fun $tmp
echo "_str:" $_str
to=$(( ($to % 65536) ))
tmp=$(( ($to / 256) ))
# tmp="\x${tmp}"
echo `printf "$tmp"`
tmp=`printf $tmp`
get="$get" "$tmp"
to=$to >> 8
get=$get `echo -e '\x${to % 0x100}'`
to=$to >> 8
get=$get `echo -e '\x${to % 0x100}'`
fi
echo "get----------->"
echo $get
}
base64_encode_string(){
# 源数据
source_string=$1
last=0
last_to=0
# 结果
result=""
# 判断是否为空
if [ 0 -eq "${#source_string}" ]; then
echo "输入为空,退出"
return
fi
# 结尾标记
end=0
echo "结尾: ${source_string:${#source_string}-3}"
if [ ${source_string:${#source_string}-2} = "==" ]; then
end=2
elif [ ${source_string:${#source_string}-1} = "=" ]; then
end=1
else
end=0
fi
# 判断字符串长度
len=${#source_string}
if [[ 4 = len ]]; then
echo "字符串长度小于4"
else
echo "字符串长度大于4"
m=${#source_string}-4
for((i=0;i<m;))
do
get ${source_string:i:4} 0
result=$result $?
i = $i + 4
done
fi
echo "对结尾进行处理..."
last=${source_string:${#source_string}-4:4}
echo $last
case $end in
0)
;;
1)
;;
2)
get $last 2
result=$result $?;;
esac
# 编码集Wnrm0b7QPpI1FGBYVizZXN84vTJqocOuD9aHdgSlt2jRyAKEe6kCxhsfwL5M3U+/
# BASE64_CODE_TABLE=(W n r m 0 b 7 Q P p I 1 F G B Y V i z Z X N 8 4 v T J q o c O u D 9 a H d g S l t 2 j R y A K E e 6 k C x h s f w L 5 M 3 U + /)
# 第一个字符取前六位,所以是对0100取整去掉最后两位,第二个是前一个字符的后两位和这个字符的
FIRST_SOURCE_BYTE_DIVIDEND=0X04
SECOND_SOURCE_BYTE_DIVIDEND=0X10
THIRD_SOURCE_BYTE_DIVIDEND=0X40
# 标记
encode_state=1
#
last_source_byte=""
# 结果
result=""
# 将字符转化成ASCII码值
for((i=0;i<${#source_string};++i)){
#curChar='printf "%d" "${#source_string:i:1}";'
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=$(( $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)
echo $FIRST_BYTE_DIVIDEND
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
str=$result
}
# main函数 $1输入文件 $2输出文件
echo "开始解密..."
# 第二种
echo "-------------------"
get TSkr 0
read m
cat $1 |while read line
do
from=$line
echo "输入参数:$from"
base64_encode_string $from
# 写入文件
echo "$str" >> $2
done
echo "解密结束..."
BaseTo有点问题,十六进制取高两位会报错,Base暂时没问题,应该
✨Shell脚本实现Base64 加密解密的更多相关文章
- django删除表重建&修改用户密码&base64加密解密字符串&ps aux参数说明&各种Error例子
1.django的queryset不支持负索引 AssertionError: Negative indexing is not supported. 2.django向前端JavaScript传递列 ...
- JS实现base64加密解密
JS实现base64加密解密 转载自http://blog.csdn.net/fengzheng0306/archive/2006/04/25/676055.aspx 方法一: <HTML> ...
- 【代码笔记】iOS-3DES+Base64加密解密
一,工程目录. 二,代码. RootViewController.m #import "RootViewController.h" #import "NSString+T ...
- 实现Base64加密解密
using System; using System.Text; namespace Common { /// <summary> /// 实现Base64加密解密 /// </ ...
- Java中使用BASE64加密&解密
package com.bao.tools.encryption; import java.io.IOException; import org.junit.Test; import sun.misc ...
- Base64加密解密原理以及代码实现(VC++)
Base64加密解密原理以及代码实现 转自:http://blog.csdn.net/jacky_dai/article/details/4698461 1. Base64使用A--Z,a--z,0- ...
- Java Base64 加密解密
使用JDK的类 BASE64Decoder BASE64Encoder package test; import sun.misc.BASE64Decoder; import sun.misc.BA ...
- php使用base64加密解密图片
php使用base64加密解密图片的实例代码. 例子: <?php //文件名:base64.php $data="/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAB ...
- Base64加密解密
/// <summary> /// 实现Base64加密解密 /// </summary> public sealed class Base64 { /// <summa ...
随机推荐
- python+opencv实现检测物体聚集区域
内容涉及:二值图像转换 / 检测连通区域面积 / 在原图上画框等 import cv2 import numpy as np for n in open('list.txt'): # list.txt ...
- Python自学——pygame安装
本片文章介绍pygame的安装方法.一则跟广大初学者分享经历,二则做个自我总结. pygame是python的库文件,跟一般的应用软件安装方法不太一样.我电脑上的python版本是python3.7, ...
- 如何完美获得一个double值的整数部分
如果是java有float类型的向上取整:Math.ceil() //只要有小数都+1向下取整:Math.floor() //不取小数四舍五入:Math.round() //四舍五入 如果是C++:方 ...
- 实战技巧,Vue原来还可以这样写
hookEvent,原来可以这样监听组件生命周期 1. 内部监听生命周期函数 <template> <div class="echarts"></di ...
- 2020年,web前端还好找工作吗?
好不好找是个相对概念,如果你要跟几年前相比,那么一定是「相对不好找」.原因所学的知识过时 用 Vue 模仿一个饿了么就能找工作的时代一去不复返. 但是为什么现在一堆大厂喊着招聘难呢? 那是因为候选人技 ...
- openstack cinder-backup流程与源码分析
在现在的云计算大数据环境下,备份容灾已经变成了一个炙手可热的话题,今天,和大家一起分享一下openstack是怎么做灾备的. [首先介绍快照] snapshot可以为volume创建快照,快照中保存了 ...
- JVM源码分析之Object.wait/notify实现
“365篇原创计划”第十一篇. 今天呢!灯塔君跟大家讲: JVM源码分析之Object.wait/notify实现 最简单的东西,往往包含了最复杂的实现,因为需要为上层的存在提 ...
- 生日聚会Party——这个线性dp有点嚣张
题目描述 今天是hidadz小朋友的生日,她邀请了许多朋友来参加她的生日party. hidadz带着朋友们来到花园中,打算 坐成一排玩游戏.为了游戏不至于无聊,就座的方案应满足如下条件:对于任意连续 ...
- HTML文档解析和DOM树的构建
浏览器解析HTML文档生成DOM树的过程,以下是一段HTML代码,以此为例来分析解析HTML文档的原理 <!DOCTYPE html> <html lang="en&quo ...
- css 分割线样式_css实现文章分割线的多种方法总结
这篇文章整理css如何实现文章分割线的多种方式,分割线在页面中可以起到美化作用,那么就来看看使用css实现分割线样式的多种方法.效果如下: 方式一:单个标签实现分隔线: html: <div c ...