You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解密已加密文件?密码学新手的技术问询

文件加密解密核心问题解答

关于密钥的必要性

  • 对称加密要求密钥一致:你使用的Fernet属于对称加密算法,加密和解密必须使用同一个密钥。代码里的Fernet.generate_key()会生成一个随机唯一的密钥,这个密钥是加密解密的核心——没有它,完全无法解密用它加密的文件。
  • 原代码的隐患:当前代码在同一次运行中加密后立刻解密能成功,因为复用了同一个密钥实例,但如果关闭程序后重新运行,新生成的密钥和之前的完全不同,就再也解不开之前加密的文件了。

解密已加密文件的正确步骤

要解密之前加密的文件,必须先拿到加密时使用的密钥,具体操作如下:

  1. 加密时务必保存密钥
    加密文件前,一定要把生成的密钥存到安全位置(比如单独的密钥文件),示例代码:

    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")
    
  2. 解密时加载保存的密钥
    解密之前的加密文件,需要先加载保存的密钥,再执行解密:

    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 07:10:58