本文目录导读:

可以的,实用脚本完全可以实现批量加密,不过具体怎么做取决于你想要的“加密”类型以及目标文件是什么。
我为你梳理几种常见的批量加密场景,并提供对应的脚本思路和示例。
批量加密文件(使用密码/密钥)
这是最常见的需求,比如用密码加密一批文档、图片或压缩包。
推荐工具: 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 "批量加密完成。"
使用方法:
- 将脚本保存为
encrypt_files.sh。 - 修改
PASSWORD变量为你自己的密码。 - 在终端中运行
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
使用方法:
- 将脚本保存为
encrypt.bat。 - 确保 7-Zip 安装在默认路径,否则修改脚本中的路径。
- 修改
PASSWORD和FILE_EXTENSION。 - 双击运行或通过命令行调用。
进行简单编码(非安全用途)
如果你的目的是“使其不可读”但不需要严格的安全保障(例如保护配置中的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.sh: 将 base64 -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" 这个命令会逐一检查哈希值是否匹配,从而判断文件是否被损坏或篡改。
重要安全建议
-
密码管理:永远不要在脚本中“硬编码”重要的密码(尤其是在共享脚本时),建议的做法是:
- 从环境变量读取 (
read -s -p "Enter password: " PASSWORD) - 从外部加密的配置文件读取
- 使用密钥文件 (
openssl enc ... -pass file:./keyfile)
- 从环境变量读取 (
-
加密算法选择:对于文件加密,AES-256 是目前的主流标准,避免使用 DES、RC4 等已知不安全的算法。
-
备份原始文件:在批量加密前,强烈建议先 备份原始文件 或在测试目录中测试脚本,加密成功后,确认可以解密,再安全删除原始文件。
-
平台兼容性:
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命令。