在开始编写代码之前,必须先配置好Python运行环境。本指南基于Python 3.8及以上版本,利用AES-256对称加密算法保障数据安全,结合Tesseract-OCR实现档案内容的数字化提取。
打开终端或命令提示符,执行以下命令安装核心依赖库:
pip install pycryptodome pillow pytesseract
接下来安装OCR识别引擎Tesseract。这是实现档案数字化的关键组件,请根据你的操作系统下载对应的安装包:
brew install tesseract。sudo apt install tesseract-ocr。注意: Windows用户安装时务必勾选"Add to PATH"选项,或者手动记录安装路径,后续代码中需要显式指定该路径。建议创建一个项目文件夹,并在其中新建两个子目录:input_files(存放待处理的档案图片或PDF)和encrypted_output(存放加密后的文件)。
为了确保档案即使被窃取也无法读取,我们将使用AES-256-GCM模式。该模式不仅提供加密,还提供数据完整性校验。新建文件crypto_utils.py,输入以下完整代码:
import os
import hashlib
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from Crypto.Random import get_random_bytes
def generate_key(password: str, salt: bytes = None) -> tuple:
"""
基于密码派生AES-256密钥
"""
if salt is None:
salt = get_random_bytes(16) 生成16字节的随机盐值
使用PBKDF2算法增强密码安全性,迭代次数设为100000
key = hashlib.pbkdf2_hmac('sha256', password.encode('utf-8'), salt, 100000, dklen=32)
return key, salt
def encrypt_file(file_path: str, password: str, output_path: str):
"""
加密文件并保存
"""
1. 生成密钥和盐值
key, salt = generate_key(password)
2. 读取文件内容
with open(file_path, 'rb') as f:
data = f.read()
3. 初始化AES加密器 (GCM模式)
cipher = AES.new(key, AES.MODE_GCM)
ciphertext, tag = cipher.encrypt_and_digest(data)
4. 将盐值、随机数、Tag和密文拼接写入文件
格式: [Salt(16)] + [Nonce(16)] + [Tag(16)] + [Ciphertext]
with open(output_path, 'wb') as f:
[f.write(x) for x in (salt, cipher.nonce, tag, ciphertext)]
print(f"文件已加密: {output_path}")
def decrypt_file(encrypted_path: str, password: str, output_path: str):
"""
解密文件并保存
"""
with open(encrypted_path, 'rb') as f:
读取头部信息
salt = f.read(16)
nonce = f.read(16)
tag = f.read(16)
ciphertext = f.read()
重新生成密钥
key, _ = generate_key(password, salt)
初始化解密器
cipher = AES.new(key, AES.MODE_GCM, nonce=nonce)
try:
data = cipher.decrypt_and_verify(ciphertext, tag)
with open(output_path, 'wb') as f:
f.write(data)
print(f"文件已解密: {output_path}")
return True
except ValueError:
print("错误: 密码错误或文件已被篡改!")
return False
这段代码包含了密钥派生、加密和解密的完整逻辑。其中encrypt_and_digest方法会自动生成一个Nonce(随机数),我们必须将Salt、Nonce和Tag与密文一起保存,否则无法解密。
在加密之前,我们通常需要提取档案中的文字信息以便建立索引。新建文件ocr_handler.py,编写如下代码:

import pytesseract
from PIL import Image
import os
Windows用户如果未配置环境变量,请取消下面这行注释并修改路径
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
def extract_text_from_image(image_path: str) -> str:
"""
从图片中提取文字,支持中文和英文
"""
try:
打开图片
image = Image.open(image_path)
使用Tesseract识别,lang='chi_sim+eng' 表示中英文混合识别
config='--psm 6' 假设图片是统一的文本块
text = pytesseract.image_to_string(image, lang='chi_sim+eng', config='--psm 6')
return text.strip()
except Exception as e:
print(f"OCR识别失败 {image_path}: {str(e)}")
return ""
def process_digitalization(input_folder: str, index_file: str):
"""
批量处理文件夹内的图片,生成文本索引文件
"""
index_data = []
supported_formats = ('.png', '.jpg', '.jpeg', '.bmp', '.tiff')
print("开始数字化处理...")
for filename in os.listdir(input_folder):
if filename.lower().endswith(supported_formats):
full_path = os.path.join(input_folder, filename)
print(f"正在识别: {filename}")
text_content = extract_text_from_image(full_path)
将文件名和识别内容存入列表
index_data.append(f"FILE: {filename}\nCONTENT:\n{text_content}\n{'='40}\n")
将索引写入文本文件
with open(index_file, 'w', encoding='utf-8') as f:
f.writelines(index_data)
print(f"数字化索引已生成: {index_file}")
return index_file
该模块会遍历输入文件夹,调用Tesseract引擎识别图片中的文字,并将所有识别结果汇总到一个index.txt文件中。这个索引文件后续也会被加密,确保敏感信息不泄露。
现在我们将上述模块整合。新建main.py,这是程序的入口。该程序将自动完成:读取图片 -> OCR提取 -> 生成索引 -> 加密原文件 -> 加密索引文件。
import os
import shutil
from crypto_utils import encrypt_file
from ocr_handler import process_digitalization
配置项
INPUT_DIR = 'input_files' 原始档案存放目录
OUTPUT_DIR = 'encrypted_output' 加密结果存放目录
PASSWORD = 'MySecurePass123!' 设置你的加密密码
def main():
检查目录
if not os.path.exists(INPUT_DIR):
print(f"错误:请先创建 {INPUT_DIR} 目录并放入档案文件")
return
if not os.path.exists(OUTPUT_DIR):
os.makedirs(OUTPUT_DIR)
1. 数字化阶段:生成文本索引
print(" 阶段1:档案数字化与OCR提取 ")
temp_index_path = os.path.join(OUTPUT_DIR, "plain_index.txt")
process_digitalization(INPUT_DIR, temp_index_path)
2. 加密阶段:加密原始文件
print("\n 阶段2:加密原始档案文件 ")
files = os.listdir(INPUT_DIR)
for file in files:
src = os.path.join(INPUT_DIR, file)
dst = os.path.join(OUTPUT_DIR, f"{file}.enc")
encrypt_file(src, PASSWORD, dst)
3. 加密阶段:加密索引文件
print("\n 阶段3:加密数字化索引 ")
encrypt_file(temp_index_path, PASSWORD, os.path.join(OUTPUT_DIR, "index.txt.enc"))
清理明文索引
os.remove(temp_index_path)
print("\n处理完成!所有文件已安全加密并保存至 output 目录。")
if __name__ == "__main__":
main()
将上述代码保存后,在input_files文件夹中放入几张测试用的图片(如扫描件、合同截图等)。然后在终端运行:
python main.py
程序将自动输出处理进度。完成后,检查encrypted_output目录,你会看到所有的.enc文件。尝试用记事本打开这些加密文件,只能看到乱码,无法获取任何原始信息。
为了验证加密系统的可用性,我们需要一个解密脚本。新建decrypt_tool.py:
import os
from crypto_utils import decrypt_file
SOURCE_DIR = 'encrypted_output'
RESTORE_DIR = 'restored_files'
PASSWORD = 'MySecurePass123!' 必须与加密密码一致
def main():
if not os.path.exists(RESTORE_DIR):
os.makedirs(RESTORE_DIR)
files = [f for f in os.listdir(SOURCE_DIR) if f.endswith('.enc')]
print(f"发现 {len(files)} 个加密文件,开始恢复...")
for file in files:
enc_path = os.path.join(SOURCE_DIR, file)
去掉.enc后缀作为恢复文件名
original_name = file[:-4]
restore_path = os.path.join(RESTORE_DIR, original_name)
decrypt_file(enc_path, PASSWORD, restore_path)
print("所有文件已恢复至 restored_files 目录")
if __name__ == "__main__":
main()
运行解密脚本:
python decrypt_tool.py
执行完毕后,打开restored_files文件夹。你会看到原始图片完好无损,并且plain_index.txt包含了之前OCR提取出的准确文字内容。如果密码输入错误,控制台会立即抛出异常并中断解密过程,这验证了GCM模式的数据完整性校验功能。
至此,一套完整的、包含OCR数字化提取与AES-256高强加密的档案管理软件已经开发完成。该方案无需任何商业授权,直接基于Python原生库实现,适合企业内部敏感文档的批量自动化安全处理。
档案整理行业认证,这玩意儿到底是不是你的职场“硬通货”?