测试步骤总是被使用人员篡改屏蔽,有没有办法使用python实现指定文件夹下内容防篡改,发现有文件被篡改后报错提示?
哈希就可以,检查初始的md5值和修改后的md5值,不一样的话,肯定是篡改了,已经完美实现并且打包成exe,只是修改下你检测的路径就可以了
指定文件设置为可读权限不行?
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:可以使用 Python 实现指定文件夹下的文件防篡改。以下是一种简单的实现方式:
1、 在要防篡改的文件夹下,生成一个哈希值文件,记录每个文件的哈希值。例如,可以使用 SHA256 算法来计算文件的哈希值,并将哈希值保存在一个文件中。
import hashlib
import os
def generate_hashes(directory_path):
with open('hashes.txt', 'w') as f:
for root, dirs, files in os.walk(directory_path):
for file in files:
file_path = os.path.join(root, file)
with open(file_path, 'rb') as f2:
file_bytes = f2.read()
hash_value = hashlib.sha256(file_bytes).hexdigest()
f.write(f"{os.path.relpath(file_path, directory_path)} {hash_value}\n")
2、 在程序运行时,计算每个文件的哈希值,并与哈希值文件中的值进行比对。如果任意一个哈希值不匹配,则说明文件被篡改过。
def verify_hashes(directory_path):
with open('hashes.txt', 'r') as f:
for line in f:
file_path, hash_value = line.strip().split(' ')
full_file_path = os.path.join(directory_path, file_path)
with open(full_file_path, 'rb') as f2:
file_bytes = f2.read()
current_hash_value = hashlib.sha256(file_bytes).hexdigest()
if current_hash_value != hash_value:
print(f"File {full_file_path} has been tampered with!")
可以将上述代码封装在一个函数中,并在需要检查文件防篡改的时候调用。
需要注意的是,这种方式仅能检测到文件内容的篡改,并不能检测到文件名、文件权限等其他方面的篡改。如果需要检测这些方面的篡改,可以考虑使用更加复杂的技术,例如数字证书、数字签名等。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
感觉还不如装个火绒,设置好密码,开自定义防护,添加自定义规则,你的文件创建修改删除阻止。自己要用时退出火绒。
直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC
语法后生成一个完美的目录。
解决方案:
要实现指定文件夹下的文件防篡改功能,可以通过计算文件的哈希值来判断文件是否被篡改,并在发现篡改时给出相应的错误提示。以下是具体的解决步骤:
hashlib
库,用于计算文件的哈希值。python import hashlib
calculate_file_hash(filepath)
,用于计算指定文件的哈希值。python def calculate_file_hash(filepath): with open(filepath, 'rb') as file: data = file.read() file_hash = hashlib.md5(data).hexdigest() return file_hash
在这个函数中,我们首先以二进制方式读取文件内容,然后使用hashlib.md5()
函数计算数据的哈希值,并使用hexdigest()
方法获取哈希值的十六进制表示。
假设指定的文件夹路径为folder_path
,我们可以使用os
模块的listdir()
函数和join()
函数来获取文件夹下的所有文件路径。
```python import os
folder_path = '指定文件夹路径' file_paths = [os.path.join(folder_path, filename) for filename in os.listdir(folder_path)] ```
```python for filepath in file_paths: # 计算当前文件的哈希值 current_hash = calculate_file_hash(filepath)
# 读取之前保存的哈希值
with open(filepath + '.hash', 'r') as file:
previous_hash = file.read()
# 比较当前哈希值和之前保存的哈希值
if current_hash != previous_hash:
print(f'文件 {filepath} 已被篡改!')
```
在这个过程中,我们首先计算当前文件的哈希值,并读取之前保存在同一文件夹下的.hash
文件中的之前的哈希值。然后,我们将当前哈希值与之前的哈希值进行比较,如果不相等,说明文件已被篡改。
.hash
文件,并保存当前的哈希值。```python for filepath in file_paths: current_hash = calculate_file_hash(filepath)
# 检查是否存在之前的哈希值文件
if not os.path.exists(filepath + '.hash'):
print(f'正在创建哈希值文件... {filepath + ".hash"}')
# 创建并保存当前哈希值到文件
with open(filepath + '.hash', 'w') as file:
file.write(current_hash)
```
在这个过程中,我们首先检查是否存在之前的哈希值文件,如果不存在,则新建一个,并将当前的哈希值保存到文件中。
综上所述,以下是完整的示例代码:
import os
import hashlib
def calculate_file_hash(filepath):
with open(filepath, 'rb') as file:
data = file.read()
file_hash = hashlib.md5(data).hexdigest()
return file_hash
folder_path = '指定文件夹路径'
file_paths = [os.path.join(folder_path, filename) for filename in os.listdir(folder_path)]
for filepath in file_paths:
current_hash = calculate_file_hash(filepath)
if not os.path.exists(filepath + '.hash'):
print(f'正在创建哈希值文件... {filepath + ".hash"}')
with open(filepath + '.hash', 'w') as file:
file.write(current_hash)
else:
with open(filepath + '.hash', 'r') as file:
previous_hash = file.read()
if current_hash != previous_hash:
print(f'文件 {filepath} 已被篡改!')
请注意替换代码中的folder_path
为你指定的文件夹路径。
以上代码将遍历指定文件夹下的所有文件,并计算每个文件的哈希值。如果存在之前的哈希值文件,将读取之前的哈希值进行比较,如果不相等则提示文件已被篡改。如果不存在之前的哈希值文件,将创建一个新的哈希值文件并保存当前的哈希值。
在Python中实现指定文件夹下的文件防篡改可以通过以下步骤:
获取指定文件夹下的所有文件路径。你可以使用os
模块来遍历文件夹并获取文件路径,例如使用os.walk()
函数。
计算每个文件的哈希值。可以使用哈希算法(如SHA256)对文件进行哈希计算,生成唯一的哈希值。可以使用hashlib
模块来实现哈希计算。
import hashlib
def calculate_hash(file_path):
hash_object = hashlib.sha256()
with open(file_path, 'rb') as file:
while True:
data = file.read(65536)
if not data:
break
hash_object.update(data)
return hash_object.hexdigest()
将文件路径和对应的哈希值保存到某个数据结构(如字典)中,用于后续比较。
定期执行文件防篡改检测。在适当的时间间隔内,遍历指定文件夹下的文件,重新计算每个文件的哈希值,并与之前保存的哈希值进行比较。如果哈希值不匹配,说明文件已被篡改。
import os
def check_integrity(folder_path, hash_dict):
for root, dirs, files in os.walk(folder_path):
for file in files:
file_path = os.path.join(root, file)
if file_path in hash_dict:
stored_hash = hash_dict[file_path]
current_hash = calculate_hash(file_path)
if stored_hash != current_hash:
print(f"File {file_path} has been tampered with.")
# 执行报错操作或其他处理
else:
# 新增的文件,可根据需求进行处理
pass
在程序启动时,先执行一次文件哈希计算,并将文件路径和对应的哈希值保存起来。
folder_path = '指定文件夹路径'
hash_dict = {}
for root, dirs, files in os.walk(folder_path):
for file in files:
file_path = os.path.join(root, file)
hash_dict[file_path] = calculate_hash(file_path)
定期调用check_integrity()
函数进行文件防篡改检测,例如可以使用定时任务或线程来定期执行。
请注意,虽然这样的文件防篡改机制可以检测文件的篡改情况,但无法防止篡改行为本身。为了更加安全地保护文件的完整性,可以结合其他安全措施,如文件权限设置、数字签名等。同时,确保程序本身的安全性也是重要的,以防止恶意篡改。
如果是linux 下可以使用Linux inotify机制,之前做input 事件监测的时候用过, python支持inotify,Windows下可以使用watchdog模块实现类似功能
下面是检测目录增删改查的
import os
import inotify.adapters
from inotify.constants import IN_CREATE, IN_DELETE, IN_MODIFY, IN_MOVE
def process_event(event):
(header, type_names, watch_path, filename) = event
print("Event:", filename, type_names)
def monitor_folder(folder):
watch = inotify.adapters.Inotify()
# 添加要监测的文件夹路径
watch.add_watch(folder, mask=IN_CREATE | IN_DELETE | IN_MODIFY | IN_MOVE)
for event in watch.event_gen():
if event is not None:
process_event(event)
# 递归遍历文件夹中的所有文件和子文件夹
def traverse_folder(folder):
for root, dirs, files in os.walk(folder):
# 监测当前文件夹
monitor_folder(root)
# 监测当前文件夹中的所有文件
for file in files:
file_path = os.path.join(root, file)
monitor_folder(file_path)
# 要监测的文件夹路径
folder_path = "/path/to/folder" #############################使用时替换为你的路径
# 开始监测文件夹及其子文件夹
traverse_folder(folder_path)
folder 也可以改为传参机制,这样更灵活点
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!