加密算法


# !/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. Windows高DPI系列控件(一) - 饼图

    目录 一.醉一醉 二.效果展示 三.高DPI适配 1.高DPI框架运作 2.适配高DPI 3.适配饼图 四.相关文章 原文链接:Windos高DPI系列控件(一) - 饼图 一.醉一醉 眨眼功夫,20 ...

  2. js/ts/tsx读取excel表格中的日期格式转换

    const formatDate = (timestamp: number) => { const time = new Date((timestamp - 1) * 24 * 3600000 ...

  3. Passing Reference Data Type Arguments

    public void moveCircle(Circle circle, int deltaX, int deltaY) { // code to move origin of circle to ...

  4. Android 错误异常之Error:Unable to resolve dependency for ':app@debug/compileClasspath': Could。。。。

    这个错误一般出现在导入别人的项目的时候出现的, 我出错原因是,as版本3.5.2用了几个月感觉不如3.0.1的带劲,so 该到了3.0.1 ,出现了这个错, 之前也遇到过,基本都是gradle版本的错 ...

  5. Mybatis架构相关的知识

    如上所示,这是一个简单的Mybaits执行流程. 我们其实可以看到,一直到第三步(Sqlsession)那么一步,这都是我们的程序里需要创建的.而之后的步骤才是底层完成的任务. 这里就有了一个引申的概 ...

  6. 【PyMuPDF和pdf2image】Python将PDF转成图片

    前言: 在最近的测试中遇到一个与PDF相关的测试需求,其中有一个过程是将PDF转换成图片,然后对图片进行测试. 粗略的试了好几种方式,其中语言尝试了Python和Java,总体而言所找到的Python ...

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

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

  8. day59 django初识

    目录 一.借助wsgiref模块实现简易版web框架 二.动静态页面 三.python三大主流web框架 四.启动一个django项目 1 启动前的注意事项 1.1 计算机的问题 1.2 django ...

  9. day32 异常处理、网络编程

    目录 一.异常处理 1 什么是异常 2 为什么要处理异常 3 如何处理异常 3.1 语法错误 3.2 逻辑错误 3.3 两种处理逻辑异常的方式 3.3.1 可预知型错误 3.3.2 不可预知型错误 4 ...

  10. .Net Core 2.2升级3.1的避坑指南

    写在前面 微软在更新.Net Core版本的时候,动作往往很大,使得每次更新版本的时候都得小心翼翼,坑实在是太多.往往是悄咪咪的移除了某项功能或者组件,或者不在支持XX方法,这就很花时间去找回需要的东 ...