利用Python实现指定文件夹下的文件防篡改

测试步骤总是被使用人员篡改屏蔽,有没有办法使用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!")

可以将上述代码封装在一个函数中,并在需要检查文件防篡改的时候调用。

需要注意的是,这种方式仅能检测到文件内容的篡改,并不能检测到文件名、文件权限等其他方面的篡改。如果需要检测这些方面的篡改,可以考虑使用更加复杂的技术,例如数字证书、数字签名等。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

感觉还不如装个火绒,设置好密码,开自定义防护,添加自定义规则,你的文件创建修改删除阻止。自己要用时退出火绒。

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7795188
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:【Python】使用python遍历文件夹,实现查找指定文件夹下所有相同名称的文件、所有相同后缀名的文件
  • 同时,你还可以查看手册:python-文件描述符错误示例 中的内容
  • 除此之外, 这篇博客: 这边刚接触Python,看了一下Python的微信刷票小程序,自己看着人家代码改了一下出错了,为什么?中的 合理的创建标题,有助于目录的生成 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 直接输入1次#,并按下space后,将生成1级标题。
    输入2次#,并按下space后,将生成2级标题。
    以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

  • 您还可以看一下 CSDN就业班老师的Python全栈工程师特训班第九期-直播回放课程中的 Python全栈工程师特训班第九期-班主任致辞小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    解决方案:

    要实现指定文件夹下的文件防篡改功能,可以通过计算文件的哈希值来判断文件是否被篡改,并在发现篡改时给出相应的错误提示。以下是具体的解决步骤:

    1. 导入hashlib库,用于计算文件的哈希值。

    python import hashlib

    1. 定义一个函数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()方法获取哈希值的十六进制表示。

    1. 获取指定文件夹下的所有文件路径。

    假设指定的文件夹路径为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)] ```

    1. 对每个文件路径进行文件哈希值的计算,并与之前的哈希值进行比较。

    ```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文件中的之前的哈希值。然后,我们将当前哈希值与之前的哈希值进行比较,如果不相等,说明文件已被篡改。

    1. 初次运行时,可能还没有保存之前的哈希值,此时可以为每个文件创建一个对应的.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中实现指定文件夹下的文件防篡改可以通过以下步骤:

  1. 获取指定文件夹下的所有文件路径。你可以使用os模块来遍历文件夹并获取文件路径,例如使用os.walk()函数。

  2. 计算每个文件的哈希值。可以使用哈希算法(如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()
    
  3. 将文件路径和对应的哈希值保存到某个数据结构(如字典)中,用于后续比较。

  4. 定期执行文件防篡改检测。在适当的时间间隔内,遍历指定文件夹下的文件,重新计算每个文件的哈希值,并与之前保存的哈希值进行比较。如果哈希值不匹配,说明文件已被篡改。

    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
    
  5. 在程序启动时,先执行一次文件哈希计算,并将文件路径和对应的哈希值保存起来。

    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)
    
  6. 定期调用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 也可以改为传参机制,这样更灵活点

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632