加密算法


# !/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 加密解密的更多相关文章

  1. django删除表重建&修改用户密码&base64加密解密字符串&ps aux参数说明&各种Error例子

    1.django的queryset不支持负索引 AssertionError: Negative indexing is not supported. 2.django向前端JavaScript传递列 ...

  2. JS实现base64加密解密

    JS实现base64加密解密 转载自http://blog.csdn.net/fengzheng0306/archive/2006/04/25/676055.aspx 方法一: <HTML> ...

  3. 【代码笔记】iOS-3DES+Base64加密解密

    一,工程目录. 二,代码. RootViewController.m #import "RootViewController.h" #import "NSString+T ...

  4. 实现Base64加密解密

    using System; using System.Text;   namespace Common { /// <summary> /// 实现Base64加密解密 /// </ ...

  5. Java中使用BASE64加密&解密

    package com.bao.tools.encryption; import java.io.IOException; import org.junit.Test; import sun.misc ...

  6. Base64加密解密原理以及代码实现(VC++)

    Base64加密解密原理以及代码实现 转自:http://blog.csdn.net/jacky_dai/article/details/4698461 1. Base64使用A--Z,a--z,0- ...

  7. Java Base64 加密解密

    使用JDK的类 BASE64Decoder  BASE64Encoder package test; import sun.misc.BASE64Decoder; import sun.misc.BA ...

  8. php使用base64加密解密图片

    php使用base64加密解密图片的实例代码. 例子: <?php //文件名:base64.php $data="/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAB ...

  9. Base64加密解密

    /// <summary> /// 实现Base64加密解密 /// </summary> public sealed class Base64 { /// <summa ...

随机推荐

  1. html实体引用

    原义字符 等价字符引用 < < > > " " ' &apos; & &

  2. 数据库基础02-MYSQL的事务

    Mysql的事务 1.基本概念      事务本质是一组SQL操作,事务中的语句要么全部执行成功,或者全部执行失败. 2.如何保证一个事务:四个特性(ACID) 原子性 (Automic)       ...

  3. vue页面数据强制更新渲染

        vue数据更新会出现缓存的情况,几种方式可以让数据实时渲染到页面: 1.简单粗暴的方式 this.$forceUpdate();//强制更新 2.增减元素 splice() push() 3. ...

  4. JS数组与对象赋值问题

    在W3C的在线编程中经过测试发现以下问题: 当一个数组内部元素为对象时,给数组赋值应该先给对象赋值,然后把该对象push到数组中. 如下所示: 在控制台打印之后的数据格式为下图所示: 如果在给数组赋值 ...

  5. python学习笔记之数据类型(二)

    上一篇博客,小波介绍了python的入门和简单流程控制,这次写python的数据类型和各种数据类型的内置方法. 一.数据类型是何方神圣? 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当 ...

  6. CTFHub_技能树_文件上传

    文件上传 无限制 直接上传一句话后门,使用蚁剑连接: 获得flag: 前端验证 尝试直接上传后门,发现被拦截,经过判断为Javascript前端验证: 这里可以使用Firefox浏览器插件禁用页面js ...

  7. 通过Windows Visual Studio远程调试WSL2中的.NET Core Linux应用程序

    最近两天在Linux中调试.NET Core应用程序,同时我发现在Linux中调试.NET Core应用程序并不容易.一直习惯在Visual Studio中进行编码和调试.现在我想的是可以简单快速的测 ...

  8. JVM 学习笔记(一)

    一:jvm架构图解 我们经常关注的jdk和jre如图所示: jre包含在jdk中,这里说一下jdk和jre的作用 JRE是Java Runtime Environment的缩写,是Java程序的运行环 ...

  9. 数据可视化之PowerQuery篇(七)Power Query应用技巧:批量更改列名

    https://zhuanlan.zhihu.com/p/130460772 ​今天分享一个PowerQuery的小技巧,导入到PowerBI中的数据,如果想要更改数据的列名,可以在PQ编辑器中直接双 ...

  10. Redis 相关运维操作

    背景 Redis作为目前全球最流行的KV存储,除了使用之外,还需要做好日常的运维工作.关于运维相关的工作,本文从以下方面进行介绍说明(Redis5.0以上): 内存方面 客户端连接方面 工具方面 说明 ...