首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文件加密

文件加密
EN

Code Review用户
提问于 2019-10-02 18:04:16
回答 1查看 56关注 0票数 3

我编写了这个小文件加密模块,以提高我使用os模块的技能。这是我第一次使用它来导航文件和文件结构,所以我确信有些东西可以改进。我使用了以下文件结构来确保它与多个目录一起工作:

文件结构

代码语言:javascript
复制
.
├── files
│   ├── files
│   │   ├── test.txt
│   │   ├── test2.txt
│   │   └── test3.txt
│   ├── files2
│   │   ├── files
│   │   │   ├── test.txt
│   │   │   ├── test2.txt
│   │   │   └── test3.txt
│   │   ├── test.txt
│   │   ├── test2.txt
│   │   └── test3.txt
│   ├── test.txt
│   ├── test2.txt
│   └── test3.txt
├── key.py
└── virus.py

它运行得完美无缺。我在寻找关于以下几个话题的反馈:

  1. os模块:os模块中是否还有其他功能可以用来完成相同的任务,但更容易或更快?
  2. 文件管理:是否有比我更快的处理文件的方法?它所花费的时间是显而易见的(对于一个大约2500字符的文件,它是0< time < 1s ),但是我相信随着更大的文件,它会变得更长。
代码语言:javascript
复制
"""
File Encryption & Decryption
"""

import os
from cryptography.fernet import Fernet

from key import KEY

DIRECTORY = "files"
FERNET = Fernet(KEY)

def crypt(encrypt=True) -> None:
    """
    Encrypts/Decrypts the files in DIRECTORY
    """

    for root, _, files in os.walk(DIRECTORY, topdown=True):
        for name in files:
            file = os.path.join(root, name)

            with open(file, "rb") as in_file:
                data = in_file.read()

            data = FERNET.encrypt(data) if encrypt else FERNET.decrypt(data)

            with open(file, "wb") as out_file:
                out_file.write(data)

if __name__ == '__main__':

    # Encrypt #
    crypt()

    # Decrypt #
    crypt(encrypt=False)
EN

回答 1

Code Review用户

回答已采纳

发布于 2019-10-02 20:35:26

一些建议:

  1. 布尔参数是一种代码气味。特别是在这种情况下,您可能希望有单独的encryptdecrypt函数,它们都重用了第三个函数,它负责所有的簿记工作。在本例中,第三个函数只需将FERNET.encryptFERNET.decrypt方法作为参数,并将其应用于数据。
  2. 要使它通常可用,您需要添加一些参数解析(可能是使用argparse ),以便能够传递要使用的任意路径。
  3. 密钥不应该在代码中--它只是数据,应该以原始密钥格式存储。如果它只是一个没有结构的/dev/urandom转储,那将是一种.bin格式,但我不熟悉Fernet。代码通常会通过传递路径参数或在标准输入上传递内容来告知密钥。

一般来说,我不会担心加密和解密需要很长时间。如果您的密钥太长(特定于算法),它可能会大大降低算法的速度,但许多算法可以被认为是相当慢的公共输入。我不知道你为什么特别选择Fernet,但是有很多可用的算法,您可能想要评估它们的强度和速度。

票数 4
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/230047

复制
相关文章

相似问题

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