PC端加解密存储系统

一、原理介绍

该程序使用了Fernet对称加密算法,它是基于AES的一种对称加密算法。在程序中,通过输入密码,将其转换为32字节的密钥,然后使用这个密钥来进行文件的加密和解密操作。Fernet算法提供了简单易用的加密方式,适合用于保护数据的传输和存储。

二、运用到《网络安全》的相关知识

  1. 密码学基础:使用了加密算法Fernet来对文件进行加密和解密操作。Fernet是基于对称密钥的加密算法,它提供了对称加密的功能,确保了数据在传输和存储过程中的安全性。
  2. 密码处理:代码中对输入的密码进行了长度检查,并且使用base64进行密钥的生成。这些操作都是密码学中常见的处理方式,以确保密码的有效性和安全性。
  3. 用户界面:通过Tkinter库创建了一个简单的图形用户界面(GUI),使得用户可以方便地选择要加密或解密的文件,并输入相应的密码。
  4. 异常处理:代码中包含了对加密和解密过程中可能出现的异常情况的处理,这是信息安全中重要的一部分,以确保系统的稳定性和安全性。

三、代码实现的界面:

(1)要加密的文件
在这里插入图片描述
在这里插入图片描述

(2)加解密程序界面
在这里插入图片描述

(3)输入密码并加密成功
在这里插入图片描述
在这里插入图片描述

(4)输入密钥,进行解密文档
在这里插入图片描述
在这里插入图片描述

四、合理化优化

考虑到输入密码时,128位密钥显然不符合显示使用的需要,程序使用了cryptography.fernet库中的Fernet类来进行文件的加密和解密操作。在生成密钥的过程中,确实需要输入一个足够长度的密码(至少8个字符),而不是直接使用128位密钥。

Fernet类内部会根据输入的密码自动生成一个对应的128位密钥。这个过程涉及到密码的盐值(salt)和密钥派生函数(如PBKDF2)。具体来说,Fernet类会将输入的密码与一个随机生成的盐值进行组合,然后通过密钥派生函数进行迭代计算,最终生成一个128位的密钥。

这种设计使得用户无需直接处理复杂的128位密钥,而是只需要记住一个相对简单、易于记忆的密码即可。同时,由于盐值的存在,即使相同的密码也会生成不同的密钥,增加了加密的安全性。

因此,虽然用户输入的密码可能较短,但通过Fernet类的密钥生成过程,最终得到的密钥仍然是128位的,符合Fernet加密算法的要求。

五、代码演示

import tkinter as tk
from tkinter import ttk, filedialog
from cryptography.fernet import Fernet
import base64


# 加载加密密钥
def load_key(password):
    #load_key 函数使用输入的密码生成了一个密钥,然后这个密钥被用于Fernet加密算法。无论你输入多长的密码,最终生成的密钥长度都是固定的,即128位(16字节),符合Fernet算法的要求。
    key = base64.urlsafe_b64encode(password.ljust(32)[:32].encode())
    return key


# 加密文件
def encrypt_file(file_path):
    password = password_entry.get()
    key = load_key(password)
    fernet = Fernet(key)

    with open(file_path, "rb") as file:
        file_data = file.read()
    encrypted_data = fernet
  • 23
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值