#!/bin/bash

# 高强度二进制加密脚本
# 加密后的文件需要root权限执行

echo "  二进制加密工具"


# 询问文件名
read -p "请输入要加密的文件名: " filename

# 检查文件是否存在
if [ ! -f "$filename" ]; then
    echo "错误: 文件 '$filename' 不存在!"
    exit 1
fi

# 检查文件是否可执行
if [ ! -x "$filename" ]; then
    echo "警告: 文件不是可执行文件，正在添加执行权限..."
    chmod +x "$filename"
fi

# 生成输出文件名
encrypted_file="${filename}.binenc"

# 生成随机密钥和盐
key=$(openssl rand -hex 32)
salt=$(openssl rand -hex 16)
iv=$(openssl rand -hex 16)

echo ""
echo "正在使用高强度二进制加密..."
echo "密钥: [已安全生成]"
echo "盐值: [已安全生成]"
echo "IV: [已安全生成]"

# 高强度二进制加密函数
binary_encrypt() {
    local file="$1"
    local key="$2"
    local salt_val="$3"
    local iv_val="$4"
    local output="$5"
    
    # 第一步: 使用AES-256-CBC加密原始文件
    echo "步骤1: AES-256-CBC加密..."
    openssl enc -aes-256-cbc -in "$file" -out "${file}.aes" -K "$key" -iv "$iv_val" -S "$salt_val"
    
    # 第二步: 使用XOR混淆
    echo "步骤2: XOR混淆..."
    xor_key=$(echo "$key$salt_val" | sha256sum | cut -d' ' -f1)
    python3 -c "
import sys
with open('${file}.aes', 'rb') as f:
    data = f.read()
key_bytes = bytes.fromhex('$xor_key')
result = bytearray()
for i, byte in enumerate(data):
    result.append(byte ^ key_bytes[i % len(key_bytes)])
with open('${file}.xor', 'wb') as f:
    f.write(result)
"
    
    # 第三步: 添加二进制填充和混淆头
    echo "步骤3: 添加混淆头..."
    {
        # 添加魔数头
        printf '\x42\x49\x4E\x45\x4E\x43' # BINENC
        # 添加版本信息
        printf '\x01\x00'
        # 添加原始文件大小
        orig_size=$(stat -c%s "$file")
        printf "\\$(printf '%03o' $((orig_size >> 24 & 0xFF)))"
        printf "\\$(printf '%03o' $((orig_size >> 16 & 0xFF)))"
        printf "\\$(printf '%03o' $((orig_size >> 8 & 0xFF)))"
        printf "\\$(printf '%03o' $((orig_size & 0xFF)))"
        # 添加随机填充数据（约5MB）
        dd if=/dev/urandom of="${file}.padding" bs=1M count=5 2>/dev/null
        cat "${file}.padding"
        # 添加加密数据标记
        printf '\x45\x4E\x43\x44\x41\x54\x41' # ENCDATA
        # 添加加密数据
        cat "${file}.xor"
        # 添加结束标记
        printf '\x45\x4E\x44\x4F\x46\x46\x49\x4C\x45' # ENDOFFILE
    } > "$output"
    
    # 第四步: 设置文件权限为仅root可执行
    chmod 700 "$output"
    chown root:root "$output"
    
    # 清理临时文件
    rm -f "${file}.aes" "${file}.xor" "${file}.padding"
}

# 保存密钥到安全文件
save_key() {
    local key_file="${encrypted_file}.key"
    {
        echo "KEY: $key"
        echo "SALT: $salt"
        echo "IV: $iv"
        echo "ORIGINAL_FILE: $filename"
        echo "ENCRYPTED_FILE: $encrypted_file"
        echo "ENCRYPTION_DATE: $(date)"
    } > "$key_file"
    chmod 600 "$key_file"
    chown root:root "$key_file"
    echo "密钥已保存到: $key_file"
}

# 执行加密
binary_encrypt "$filename" "$key" "$salt" "$iv" "$encrypted_file"
save_key

echo ""
echo "✅ 高强度二进制加密完成!"
echo "📁 加密文件: $encrypted_file"
echo "🔐 文件权限: 仅root可执行"
echo "📊 文件大小: $(stat -c%s "$encrypted_file") 字节"
echo ""
echo "⚠️  请妥善保管密钥文件，没有密钥无法解密!"
echo "========================================"