当前位置: 首页 > news >正文

使用python加密主机文件几种方法实现

本文主要介绍了使用python加密主机文件几种方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

数据加密是一种保护数据安全的技术,通过对数据进行编码,使得未经授权的用户无法读取或改动数据。

加密是通过使用加密算法和密钥实现的。加密算法是一种特定的算法,可以将数据编码成不可读的形式,密钥是一串字符串,用于控制加密和解密的过程。加密后的数据只能使用对应的密钥解密。

加密在保护数据的安全性方面非常重要,尤其是在互联网和移动设备环境中,用户的隐私数据容易遭到黑客的攻击。加密技术不仅可以保护数据的隐私,还可以保护数据的完整性,确保数据不被篡改。

在企业环境中,数据加密也被广泛应用于保护公司数据的安全。从合同到秘密文件,加密技术可以保护公司数据不被未经授权的人员查看。

总的来说,数据加密是一种重要的保护数据安全的技术,对于任何用户和企业都非常重要。

要求:利用python对某个目录的全部文件进行加密,密钥由用户的输入的字符串经过变化而生成,封装为一个函数,输入参数有目录路径和用户输入的字符串。

以下是使用 Python 实现的一种简单的文件加密方案:

1

2

3

4

5

6

7

8

9

10

11

12

13

importos

importhashlib

defencrypt_directory(directory, password):

forroot, dirs, files inos.walk(directory):

forfileinfiles:

path =os.path.join(root, file)

with open(path, 'rb') as f:

data =f.read()

key =hashlib.sha256(password.encode()).hexdigest()

encrypted_data =bytearray(x ^ ord(key[i %len(key)]) fori, x inenumerate(data))

with open(path, 'wb') as f:

f.write(encrypted_data)

该函数接收两个参数:目录路径和用户输入的字符串。它通过使用 os.walk 对目录下的每个文件进行加密,并将加密后的数据写回文件。加密使用了异或操作,密钥是对用户输入的字符串进行 SHA-256 哈希的十六进制字符串。

以下是对上面的加密函数的对应解密函数:

1

2

3

4

5

6

7

8

9

10

11

scssCopy code

defdecrypt_directory(directory, password):

forroot, dirs, files inos.walk(directory):

forfileinfiles:

path =os.path.join(root, file)

with open(path, 'rb') as f:

encrypted_data =f.read()

key =hashlib.sha256(password.encode()).hexdigest()

data =bytearray(x ^ ord(key[i %len(key)]) fori, x inenumerate(encrypted_data))

with open(path, 'wb') as f:

f.write(data)

该函数与上面的加密函数类似,但是它读入加密后的文件,并使用相同的密钥对数据进行异或操作,以获得原始文件。

将上述代码更换加密算法,使用AES加密,代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

importos

importhashlib

fromCrypto.Cipher importAES

defencrypt_directory(directory, password):

# 计算密钥

key =hashlib.sha256(password.encode()).digest()[:16]

forroot, dirs, files inos.walk(directory):

forfileinfiles:

path =os.path.join(root, file)

# 读取文件

with open(path, 'rb') as f:

data =f.read()

# 对数据进行补位

padding_length =16-len(data) %16

data +=bytes([padding_length] *padding_length)

# 初始化加密器

cipher =AES.new(key, AES.MODE_ECB)

# 加密数据

encrypted_data =cipher.encrypt(data)

# 将加密后的数据写回文件

with open(path, 'wb') as f:

f.write(encrypted_data)

defdecrypt_directory(directory, password):

# 计算密钥

key =hashlib.sha256(password.encode()).digest()[:16]

forroot, dirs, files inos.walk(directory):

forfileinfiles:

path =os.path.join(root, file)

# 读取文件

with open(path, 'rb') as f:

encrypted_data =f.read()

# 初始化解密器

cipher =AES.new(key, AES.MODE_ECB)

# 解密数据

data =cipher.decrypt(encrypted_data)

# 删除补位数据

padding_length =data[-1]

data =data[:-padding_length]

# 将解密后的数据写回文件

with open(path, 'wb') as f:

f.write(data)

注:上面的代码仅供参考,不建议在生产环境中使用。AES ECB 模式并不是很安全,应该使用其他模式。

或者使用非对称加密:

这里使用RSA加密算法实现数据的加密解密:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

importos

importrsa

defencrypt_file(file_path, public_key_file):

"""使用RSA算法加密文件

参数:

file_path: 需要加密的文件路径

public_key_file: 公钥文件路径

返回值:

"""

# 读取文件内容

with open(file_path, "rb") as file:

file_content =file.read()

# 读取公钥

with open(public_key_file, "rb") as key_file:

public_key =rsa.PublicKey.load_pkcs1(key_file.read())

# 加密文件内容

encrypted_content =rsa.encrypt(file_content, public_key)

# 将加密后的内容写入文件

with open(file_path, "wb") as file:

file.write(encrypted_content)

defdecrypt_file(file_path, private_key_file, password):

"""使用RSA算法解密文件

参数:

file_path: 需要解密的文件路径

private_key_file: 私钥文件路径

password: 私钥文件密码

返回值:

"""

# 读取文件内容

with open(file_path, "rb") as file:

encrypted_content =file.read()

# 读取私钥

with open(private_key_file, "rb") as key_file:

private_key =rsa.PrivateKey.load_pkcs1(key_file.read(), password)

# 解密文件内容

file_content =rsa.decrypt(encrypted_content, private_key)

# 将解密后的内容写入文件

with open(file_path, "wb") as file:

file.write(file_content)

需要注意的是,RSA加密的效率较低,适用于加密少量数据,如对文件进行加密

到此这篇关于使用python加密主机文件几种方法实现的文章就介绍到这了。

300+Python经典编程案例
50G+学习视频教程
点击拿去

相关文章:

使用python加密主机文件几种方法实现

本文主要介绍了使用python加密主机文件几种方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧数据加密是一种保护数据安全的技术,通过对数据进行编…...

西湖论剑 2023 比赛复现

WEB real_ez_node 在 route/index.js 中: router.post(/copy,(req,res)>{res.setHeader(Content-type,text/html;charsetutf-8)var ip req.connection.remoteAddress;console.log(ip);var obj {msg: ,}if (!ip.includes(127.0.0.1)) {obj.msg"only for…...

微信小程序更换管理员/重置管理员

方式1: 首先进入微信公众平台官网进入并登录后在管理中找到成员管理选项找到管理员点击后方的修改选项需要使用原管理员的微信进行扫码验证扫码后在手机上确认绑定新管理员,注意:如果是个人账号不可以更改成其他人。 方式2:原管…...

企业进存销管理系统

技术:Java、JSP等摘要:随着当今世界计算机技术的飞速发展,计算机在企业管理中应用的普及,利用计算机实现企业进销存管理势在必行。本系统结合公司实际的进销存制度,通过对本公司的供应商、客户、商品、进货、销售、进销…...

C++入门

变量变量创建的语法: 数据类型 变量名 变量初始值;int a 10;cout << a << endl;常量作用:用于记录程序中不可更改的教国C定义常量两种方式1).#define 宏常量:#define 常量名 常量值通常在文件上方定义。表示一个常量2).const 修饰的变量const 数据类型 常量名 常…...

视频知识点(20)- H264码流如何在SPS中获取宽高信息?

《音视频开发》系列-总览 前沿 了解H264视频编码格式的小伙伴都知道,H264编码中存在两个非常重要的参数集。没错,它们就是序列参数集(SPS)和图像参数集(PPS),而且通常情况下,PPS会依赖SPS中的部分参数信息,同时,视频码流的宽高信息也存储在SPS中。那么如何从中获取视…...

鲜花数据集实验结果总结

从read_split_data中得到&#xff1a;训练数据集&#xff0c;验证数据集&#xff0c;训练标签&#xff0c;验证标签。的所有的具体详细路径 数据集位置&#xff1a;https://download.csdn.net/download/guoguozgw/87437634 import os #一种轻量级的数据交换格式&#xff0c; …...

ElasticJob-Lite架构篇 - 认知分布式任务调度ElasticJob-Lite

前言 本文基于 ElasticJob-Lite 3.x 版本展开分析。 如果 Quartz 集群中有多个服务端节点&#xff0c;任务决定在哪个服务端节点上执行的呢&#xff1f; Quartz 采用随机负载&#xff0c;通过 DB 抢占下一个即将触发的 Trigger 绑定的任务的执行权限。 在 Quartz 的基础上&…...

【直击招聘C++】2.6 对象之间的复制

2.6 对象之间的复制一、要点归纳1. 对象之间的复制操作1.1 运算符1.2 拷贝构造函数2. 对象之间的浅复制和深复制2.1 对象的浅复制2.2 对象的深复制二、面试真题解析面试题1面试题2一、要点归纳 1. 对象之间的复制操作 同一个类的对象之间可以进行复制操作&#xff0c;即将一个…...

学了这么久python,不会连自己啥python版本都不知道吧?

人生苦短&#xff0c;我用Python 源码资料电子书:点击此处跳转文末名片获取 查看 Python 版本 我们可以在命令窗口(Windows 使用 winR 调出 cmd 运行框)使用以下命令查看我们使用的 Python 版本&#xff1a; python -V 或 python --version 以上命令执行结果如下&#xff1a; …...

Revive:从间谍软件进化成银行木马

2022 年 6 月&#xff0c;Cleafy 研究人员发现了一个新的安卓银行木马 Revive。之所以选择 Revive 这个名称&#xff0c;是因为恶意软件为防止停止工作启用的一项功能名为 revive。 Revive 属于持续潜伏的那一类恶意软件&#xff0c;因为它是为特定目标开发和定制的。这种类型…...

Python 之 NumPy 简介和创建数组

文章目录一、NumPy 简介1. 为什么要使用 NumPy2. NumPy 数据类型3. NumPy 数组属性4. NumPy 的 ndarray 对象二、numpy.array() 创建数组1. 基础理论2. 基础操作演示3. numpy.array() 参数详解三、numpy.arange() 生成区间数组四、numpy.linspace() 创建等差数列五、numpy.logs…...

与六年测试工程师促膝长谈,他分享的这些让我对软件测试工作有了全新的认知~

不知不觉已经从事软件测试六年了&#xff0c;2016年毕业到进入外包公司外包给微软做软件测试&#xff0c; 到现在加入著名的外企。六年的时间过得真快。长期的测试工作也让我对软件测试有了比较深入的认识。但是我至今还是一个底层的测试人员&#xff0c;我的看法都比较狭隘&am…...

裕太微在科创板上市:市值约186亿元,哈勃科技和小米基金为股东

2月10日&#xff0c;裕太微电子股份有限公司&#xff08;下称“裕太微”&#xff0c;SH:688515&#xff09;在上海证券交易所上市。本次上市&#xff0c;裕太微的发行价为92元/股&#xff0c;发行2000万股&#xff0c;发行市盈率不适用&#xff0c;发行后总股本8000万股。 根据…...

毕业后5年,我终于变成了月薪13000的软件测试工程师

我用了近2个月的时间转行&#xff0c;在今年1月底顺利入职了一家北京的互联网公司&#xff0c;从事的是软件测试的工作。 和大家看到的一样&#xff0c;我求职的时间花费的比较短&#xff0c;求职过程非常顺利&#xff0c;面试了一周就拿到了3家offer&#xff0c;3家offer的薪…...

实践指南|如何在 Jina 中使用 OpenTelemetry 进行应用程序的监控和跟踪

随着软件和云技术的普及&#xff0c;越来越多的企业开始采用微服务架构、容器化、多云部署和持续部署模式&#xff0c;这增加了因系统失败而给运维/ SRE / DevOps 团队带来的压力&#xff0c;从而增加了开发团队和他们之间的摩擦&#xff0c;因为开发团队总是想尽快部署新功能&…...

MySQL 创建数据表

在创建数据库之后&#xff0c;接下来就要在数据库中创建数据表。所谓创建数据表&#xff0c;指的是在已经创建的数据库中建立新表。 创建数据表的过程是规定数据列的属性的过程&#xff0c;同时也是实施数据完整性&#xff08;包括实体完整性、引用完整性和域完整性&#xff09…...

一文详解网络安全事件的防护与响应

网络安全事件的发生&#xff0c;往往意味着一家企业的生产经营活动受到影响&#xff0c;甚至数据资产遭到泄露。日益复杂的威胁形势使现代企业面临更大的网络安全风险。因此&#xff0c;企业必须提前准备好响应网络安全事件的措施&#xff0c;并制定流程清晰、目标明确的事件响…...

vue directive 注册局部指令

注册局部指令 vue directive 在注册局部指令时&#xff0c;是通过在组件 options 选项中设置 directives 属性。如下&#xff1a; directives: {focus: {// 指令的定义inserted: function (el) {el.focus()}} }在模板中的任何元素上都可以使用新的 v-focus property&#xff…...

LC-70-爬楼梯

原题链接&#xff1a;爬楼梯 个人解法 思路&#xff1a; 动态规划 状态表示&#xff1a;f[i]表示走到第n阶台阶有几种方法 状态转移&#xff1a;f[i] f[i -1] f[i - 2] 这实际上就是斐波那契数列&#xff0c;通过转移可以看到&#xff0c;我们只用了三个变量&#xff0c;故…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...