实用脚本能批量加密吗?

wen 实用脚本 12

本文目录导读:

实用脚本能批量加密吗?

  1. 场景一:批量加密文件(使用密码/密钥)
  2. 场景二:批量对内容进行简单编码(非安全用途)
  3. 场景三:批量对文件进行Hash校验(检测完整性)
  4. 重要安全建议

可以的,实用脚本完全可以实现批量加密,不过具体怎么做取决于你想要的“加密”类型以及目标文件是什么。

我为你梳理几种常见的批量加密场景,并提供对应的脚本思路和示例。

批量加密文件(使用密码/密钥)

这是最常见的需求,比如用密码加密一批文档、图片或压缩包。

推荐工具: openssl (Linux/macOS/WSL) 或 7-Zip (Windows)

方法1:使用 OpenSSL 脚本 (Linux/macOS)

OpenSSL 是一个非常强大的命令行加密工具,以下脚本会使用 AES-256-CBC 算法对当前目录下所有 .txt 文件进行加密。

脚本 (encrypt_files.sh):

#!/bin/bash
# 定义密码(实际使用中建议从环境变量或文件读取,更安全)
PASSWORD="your_strong_password_here"
# 加密后的文件后缀
EXTENSION=".enc"
echo "开始批量加密所有 .txt 文件..."
# 遍历所有 .txt 文件
for file in *.txt; do
    # 检查文件是否存在,防止没有匹配时出错
    if [ -f "$file" ]; then
        # 构造输出文件名
        output_file="${file}${EXTENSION}"
        # 使用 openssl 进行加密
        # -pbkdf2: 使用基于密码的密钥派生函数2,增强密码安全性
        openssl enc -aes-256-cbc -salt -pbkdf2 -in "$file" -out "$output_file" -pass pass:"$PASSWORD"
        # 检查加密是否成功
        if [ $? -eq 0 ]; then
            echo "成功加密: $file -> $output_file"
            # 可选:删除原始文件
            # rm "$file"
        else
            echo "加密失败: $file"
        fi
    fi
done
echo "批量加密完成。"

使用方法:

  1. 将脚本保存为 encrypt_files.sh
  2. 修改 PASSWORD 变量为你自己的密码。
  3. 在终端中运行 bash encrypt_files.sh

解密脚本 (decrypt_files.sh) 思路: 原理类似,只需将 -in-out 对调,并将加密参数 -e 改为 -d

方法2:使用 7-Zip 脚本 (Windows)

7-Zip 的 7z.exe 命令行工具支持强大的 AES-256 加密压缩,非常适合批量处理。

脚本 (encrypt_with_7zip.bat):

@echo off
setlocal enabledelayedexpansion
:: 设置密码
set "PASSWORD=your_strong_password_here"
:: 设置要处理的后缀,.docx .pdf .xlsx
set "FILE_EXTENSION=*.docx"
echo 正在批量加密 %FILE_EXTENSION% 文件...
:: 遍历所有匹配的文件
for %%f in (%FILE_EXTENSION%) do (
    echo 正在加密: %%f
    :: -tzip: 压缩成zip格式
    :: -mem=AES256: 使用AES-256加密
    :: -p"!PASSWORD!": 设置密码
    :: -y: 所有确认都回答是
    "C:\Program Files\7-Zip\7z.exe" a -tzip -mem=AES256 -p"!PASSWORD!" -y "%%f.zip" "%%f" >nul
    if !errorlevel! equ 0 (
        echo 成功加密: %%f.zip
        :: 可选:删除原始文件
        :: del "%%f"
    ) else (
        echo 加密失败: %%f
    )
)
echo 批量加密完成。
pause

使用方法:

  1. 将脚本保存为 encrypt.bat
  2. 确保 7-Zip 安装在默认路径,否则修改脚本中的路径。
  3. 修改 PASSWORDFILE_EXTENSION
  4. 双击运行或通过命令行调用。

进行简单编码(非安全用途)

如果你的目的是“使其不可读”但不需要严格的安全保障(例如保护配置中的API密钥不被轻易看到),可以使用Base64或其他编码。

脚本 (encode_batch.sh):

#!/bin/bash
# 对当前目录下所有 .conf 文件进行 Base64 编码
for file in *.conf; do
    if [ -f "$file" ]; then
        # 将原始文件 base64 编码后写入同名 .b64 文件
        base64 -w 0 "$file" > "${file}.b64"
        echo "已编码: $file -> ${file}.b64"
        # 可选:删除原始文件
        # rm "$file"
    fi
done

decode_batch.shbase64 -d 并调换 -in-out 即可。

批量对文件进行Hash校验(检测完整性)

这不是加密,而是为每个文件生成一个唯一的“指纹”(Hash值),用于验证文件是否被修改。

脚本 (hash_files.sh):

#!/bin/bash
# 输出文件名
OUTPUT_FILE="file_hashes.sha256"
# 清空或创建输出文件
> "$OUTPUT_FILE"
echo "正在为当前目录下所有文件计算 SHA256 哈希值..."
# 遍历所有文件(除了隐藏文件和输出文件本身)
for file in *; do
    if [ -f "$file" ] && [ "$file" != "$OUTPUT_FILE" ]; then
        # 计算 SHA256 并追加到输出文件
        sha256sum "$file" >> "$OUTPUT_FILE"
        echo "已处理: $file"
    fi
done
echo "完成!哈希值保存在: $OUTPUT_FILE"

验证脚本 (verify_hashes.sh): sha256sum -c "$OUTPUT_FILE" 这个命令会逐一检查哈希值是否匹配,从而判断文件是否被损坏或篡改。

重要安全建议

  1. 密码管理:永远不要在脚本中“硬编码”重要的密码(尤其是在共享脚本时),建议的做法是:

    • 从环境变量读取 (read -s -p "Enter password: " PASSWORD)
    • 从外部加密的配置文件读取
    • 使用密钥文件 (openssl enc ... -pass file:./keyfile)
  2. 加密算法选择:对于文件加密,AES-256 是目前的主流标准,避免使用 DES、RC4 等已知不安全的算法。

  3. 备份原始文件:在批量加密前,强烈建议先 备份原始文件 或在测试目录中测试脚本,加密成功后,确认可以解密,再安全删除原始文件。

  4. 平台兼容性openssl 在Linux和macOS上原生支持,Windows用户可以使用 WSL(Windows Subsystem for Linux)Cygwin,或者使用基于PowerShell的解决方案(但 openssl 是最直接可靠的)。

加密目标 推荐工具 脚本类型 安全级别
安全加密文件 openssl (Linux/macOS) / 7-Zip (Windows) Shell / Batch
混淆 base64 Shell 无 (可逆,非安全)
完整性校验 sha256sum Shell 高 (用于检测篡改)

只要明确你的需求(对文件加密、对文本编码、还是生成校验和),上面的脚本模板可以直接修改使用,如果需要更复杂的逻辑(如子目录递归、特定大小过滤等),可以进一步修改for循环或添加find命令。

抱歉,评论功能暂时关闭!