shell在安卓中的两种简单加密

#16进制加密


#!/bin/bash

echo_bold_red() {
  echo -e "\033[1m\033[31m$1\033[0m"
}
# 原始脚本的路径
ORIGINAL_SCRIPT_PATH="你的脚本地址/加密前.sh"

# 加密后新脚本的路径
ENCODED_SCRIPT_PATH="加密后的脚本地址/加密后.sh"

# 确保原始脚本存在
if [ ! -f "$ORIGINAL_SCRIPT_PATH" ]; then
    echo "原始脚本不存在: $ORIGINAL_SCRIPT_PATH"
    exit 1
fi

# 读取原始脚本内容
SCRIPT_CONTENT=$(cat "$ORIGINAL_SCRIPT_PATH")

# 初始化编码内容变量
ENCODED_CONTENT="$SCRIPT_CONTENT"

# 计算原始脚本大小
ORIGINAL_SIZE=$(echo -n "$SCRIPT_CONTENT" | wc -c | awk '{print $1/1024/1024}')
echo "原始脚本的大小为: ${ORIGINAL_SIZE} MB"

# 初始化大小阈值
MAX_SIZE_1MB=1
MAX_SIZE_2MB=2

# 初始化ENCODED_CONTENT
ENCODED_CONTENT="$SCRIPT_CONTENT"

# 计算达到1MB和2MB的编码层数
i=0
CONTINUE_ENCODING=1
while [ "$CONTINUE_ENCODING" -eq 1 ]; do
    i=$(expr $i + 1)
    echo "尝试第 ${i} 次编码"
    # 编码
    ENCODED_CONTENT=$(echo -n "$ENCODED_CONTENT" | xxd -p | tr -d '\n')
    # 计算编码后大小
    ENCODED_SIZE=$(echo -n "$ENCODED_CONTENT" | wc -c | awk '{print $1/1024/1024}')
    echo "编码$1次后的大小为: ${ENCODED_SIZE} MB"


# 检查是否达到1MB

if [ "$(echo "$ENCODED_SIZE >= $MAX_SIZE_1MB" | bc)" -eq 1 ] && [ "$MAX_SIZE_1MB" != "-1" ]; then
    echo_bold_red "达到1MB的编码层数为: $i"
    MAX_SIZE_1MB=-1
fi

# 检查是否超过2MB
if [ "$(echo "$ENCODED_SIZE >= $MAX_SIZE_2MB" | bc)" -eq 1 ]; then
    echo_bold_red "超过2MB的最小编码层数为: $i"
    break
fi
done

# 初始化ENCODED_CONTENT
ENCODED_CONTENT="$SCRIPT_CONTENT"

# 提示用户输入编码层数
echo -n "请输入您希望编码的层数(建议不要超过$i层): "
read ENCODING_LAYERS
if [ "$ENCODING_LAYERS" -le 0 ]; then
    echo "编码层数至少为1。"
    exit 1
fi

# 应用用户指定层数的十六进制编码
for i in $(seq 1 $ENCODING_LAYERS); do
    ENCODED_CONTENT=$(echo -n "$ENCODED_CONTENT" | xxd -p | tr -d '\n')
    
    CONTENT_SIZE=$(echo -n "$ENCODED_CONTENT" | wc -c | awk '{print $1/1024/1024}')
    echo "第 $i 层编码后的数据大小为: $CONTENT_SIZE MB"
    
    if [ "$(echo "$CONTENT_SIZE > 10" | bc)" -eq 1 ]; then
        echo "编码后的数据已超过10MB。请减少编码层数。"
        exit 1
    fi
done

# 在脚本最后显示加密后的大小(如果你需要)

ENCODED_SIZE=$(echo -n "$ENCODED_CONTENT" | wc -c | awk '{print $1/1024/1024}')
echo_bold_red "加密脚本最后的大小为: ${ENCODED_SIZE} MB"


# 创建新脚本并写入解码逻辑与编码内容
cat > "$ENCODED_SCRIPT_PATH" <<EOF
#!/bin/bash
ENCODED_SCRIPT="$ENCODED_CONTENT"

decode_hex() {
    local hex=\$1
    local count=\$2
    while [ \$count -gt 0 ]; do
        local decoded=\$(echo -n "\$hex" | xxd -r -p)
        hex="\$decoded"
        count=\$(expr \$count - 1)
    done
    echo -n "\$hex"
}

DECODED_SCRIPT=\$(decode_hex "\$ENCODED_SCRIPT" $ENCODING_LAYERS)
eval "\$DECODED_SCRIPT"
EOF

# 为新脚本添加执行权限
chmod +x "$ENCODED_SCRIPT_PATH"

# 输出基本信息
echo "加密脚本已生成并位于路径: $ENCODED_SCRIPT_PATH"

#base64加密


#!/bin/bash

# 原始脚本的路径
ORIGINAL_SCRIPT_PATH="你的脚本地址/加密前.sh"

# 加密后新脚本的路径
ENCODED_SCRIPT_PATH="加密后路径/加密后.sh"

# 确保原始脚本存在
if [ ! -f "$ORIGINAL_SCRIPT_PATH" ]; then
    echo "原始脚本不存在: $ORIGINAL_SCRIPT_PATH"
    exit 1
fi

# 读取原始脚本内容并开始编码过程
ENCODED_CONTENT=$(< "$ORIGINAL_SCRIPT_PATH")

# 执行20次Base64编码
for i in $(seq 1 20); do
    ENCODED_CONTENT=$(echo -n "$ENCODED_CONTENT" | base64)
    # 进度提示信息
    echo "编码层级 $i 完成"
done

# 创建一个新的脚本文件并写入解码逻辑与编码后内容
cat > "$ENCODED_SCRIPT_PATH" <<EOF
#!/bin/bash
ENCODED_SCRIPT="$ENCODED_CONTENT"

# 采用管道的方式进行20次Base64解码
for i in \$(seq 1 20); do
    ENCODED_SCRIPT=\$(echo -n "\$ENCODED_SCRIPT" | base64 -d)
    # 进度提示信息
    echo "解码层级 \$i 完成"
done

# 执行解码后的原始脚本
eval "\$ENCODED_SCRIPT"
EOF

# 为新脚本添加执行权限
chmod +x "$ENCODED_SCRIPT_PATH"

# 打印完成消息
echo "加密的脚本已生成在路径: $ENCODED_SCRIPT_PATH"


  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值