if input_file_path.endswith("encrypted" output_file_path = input_file_path[:-10] else: output_file_path = input_file_path + "decrypted" with open(input_file_path, "" file: encrypted_data = file.read() try: decrypted_data = cipher.decrypt(encrypted_data) # 核心解密操作 except cryptography.fernet.InvalidToken: print("错误:密钥无效或文件已被篡改!" return with open(output_file_path, "wb" as file: file.write(decrypted_data) print(f"解密完成!解密后文件为: {output_file_path}"第五步:创建主程序逻辑 将以上功能整合,形成一个简单的命令行交互程序。 ```python def main(): import sys if len(sys.argv) < 3: print(":" print("生成密钥: python my_encryptor.py --generate-key" print(" 加密文件: python my_encryptor.py -e 原始文件 [输出文件]" print("解密文件: python my_encryptor.py -d 加密文件 [输出文件]" return mode = sys.argv[1] if mode == "generate-key" generate_key() elif mode == "e" input_file = sys.argv[2] output_file = sys.argv[3] if len(sys.argv) > 3 else None encrypt_file(input_file, output_file) elif mode == "d" input_file = sys.argv[2] output_file = sys.argv[3] if len(sys.argv) > 3 else None decrypt_file(input_file, output_file) else: print("的命令选项。"if __name__ == "__main__" main() ``` 将以上所有代码块按顺序保存为一个名为 `my_encryptor.py` 的文件,你就拥有了一个基础但功能完整的文件加密工具。 四、超越基础:提升安全性与防泄漏能力的进阶思路上述程序演示了核心流程,但一个健壮的加密软件还需考虑更多安全维度: 1.强化密钥管理:密钥文件(`secret.key`)是生命线。绝对不要将其与密文存放在同一位置。考虑使用密钥派生函数,如PBKDF2,让用户通过记忆一个强口令来派生密钥,这样无需存储密钥文件。 2.增加文件完整性校验:除了加密,还应验证文件在传输或存储中是否被篡改。`Fernet` 已内置完整性校验。若使用其他底层模式,需结合HMAC(哈希消息认证码)。 3.实现分块加密大文件:上述代码一次性读取整个文件到内存,对于超大文件不友好。应实现分块读取、加密、写入的流程,避免内存溢出。 4.添加元数据保护:加密文件内容后,文件名、大小、修改时间等元数据也可能泄露信息。考虑将文件打包到一个加密容器中,或对文件名也进行混淆处理。 5.安全删除原始文件:当加密完成后,应使用多次覆写等安全删除技术来清除磁盘上的原始明文数据,防止被数据恢复软件读取。 五、自制加密软件在数据防泄漏体系中的定位通过这个自制教程,我们深刻认识到,技术工具只是数据防泄漏的一环。一个完整的数据防泄漏策略应包含:
自制加密软件的意义在于,它让你亲身体验数据从明文到密文的转换过程,理解“密钥”的绝对重要性,从而在实际工作中更能审慎地对待各类商业加密产品和云服务的安全设置。它并非要取代专业软件,而是成为你构建全面数据安全思维的实践起点。 永远记住:在真正的安全领域,自制的工具需经过严格的安全审计才能用于保护高价值数据。对于企业核心数据,建议采用经过时间检验和广泛审计的商业或开源成熟方案。但这份亲手实践的体验,无疑将使你从一个被动的软件使用者,转变为更主动、更懂行的数据安全守护者。 |
| ·上一条:如何给软件上加密码:构建数据防泄漏的核心屏障 | ·下一条:如何解加密应用软件:从技术剖析到数据防泄漏实战指南 |