如何解密已加密文件?密码学新手的技术问询
文件加密解密核心问题解答
关于密钥的必要性
- 对称加密要求密钥一致:你使用的Fernet属于对称加密算法,加密和解密必须使用同一个密钥。代码里的
Fernet.generate_key()会生成一个随机唯一的密钥,这个密钥是加密解密的核心——没有它,完全无法解密用它加密的文件。 - 原代码的隐患:当前代码在同一次运行中加密后立刻解密能成功,因为复用了同一个密钥实例,但如果关闭程序后重新运行,新生成的密钥和之前的完全不同,就再也解不开之前加密的文件了。
解密已加密文件的正确步骤
要解密之前加密的文件,必须先拿到加密时使用的密钥,具体操作如下:
加密时务必保存密钥
加密文件前,一定要把生成的密钥存到安全位置(比如单独的密钥文件),示例代码:from cryptography.fernet import Fernet # 生成密钥并保存 key = Fernet.generate_key() with open("secret.key", "wb") as key_file: key_file.write(key) cipher = Fernet(key) # 加密文件(建议写入新文件,不覆盖原文件) def encrypt_file(file_path): with open(file_path, "rb") as f: content = f.read() encrypted_content = cipher.encrypt(content) # 写入加密后的新文件,保留原文件 with open(f"{file_path}.encrypted", "wb") as f: f.write(encrypted_content) encrypt_file("your_file.txt")解密时加载保存的密钥
解密之前的加密文件,需要先加载保存的密钥,再执行解密:from cryptography.fernet import Fernet # 加载之前保存的密钥 with open("secret.key", "rb") as key_file: key = key_file.read() cipher = Fernet(key) # 解密文件(写入新文件,避免覆盖加密文件) def decrypt_file(encrypted_file_path): with open(encrypted_file_path, "rb") as f: encrypted_content = f.read() decrypted_content = cipher.decrypt(encrypted_content) # 生成解密后的文件名 decrypted_file_path = encrypted_file_path.replace(".encrypted", "_decrypted.txt") with open(decrypted_file_path, "wb") as f: f.write(decrypted_content) decrypt_file("your_file.txt.encrypted")
关键注意事项
- 密钥必须妥善保管:丢失密钥等同于丢失加密文件的全部内容;密钥泄露则意味着加密内容可能被他人破解。
- 避免直接覆盖原文件:加密和解密时都建议生成新文件,防止操作失误导致原文件永久丢失。
内容的提问来源于stack exchange,提问作者cihan
相关产品推荐
相关产品推荐

