今天这个批量加解密很简单,和上一个【软件加密】python制作一个超强的加密软件_₰₯₮ 的博客-CSDN博客

文章结合了一下,然后优化了一下

循环文件夹的所有文件,然后捉个进行加解密

    def iterbrowse(path):
        for home, dirs, files in os.walk(path):
            for filename in files:
                yield os.path.join(home, filename)

    for fullname in iterbrowse(DATA_1):
        NAME = fullname
        NAME = NAME.replace("\\", "/")  # 替换

这个用于检测是否是已经被加密过的文件,是的话则执行解密,不是的话则执行加密

    if NAME.split(".")[-1][-10:] == 'DATAAES-AI':  # 检测是否是已经加密后的文件,用于检测后缀的DATAAES-AI
        #解密
        F = NAME.split(os.path.sep)[0].replace("DATAAES-AI", "")  #去除DATAAES-AI
        print(f'[-.·J·.-]: ',NAME, '\t\t- - - - 解密成功!!!')
     else:
        #加密
        F = NAME.split(os.path.sep)[0]+"DATAAES-AI"
        print(f'[+·J·+]: ', NAME, '\t\t+ + + + 加密成功!!!')

插入一段检测文件大小,可以进行加密大文件和小文件

def get_FileSize(filePath):
    fsize = os.path.getsize(filePath)
    fsize = fsize / float(1024 * 1024)
    size = "%.0f" % fsize

其实原本我又做了一个是双重密码组合的加解密程序,只是没有在写文章,因为太过简单,没必要,只不过是在原基础上增加了一个密钥,就是再次将MD5值扩展了一个层级。

然后今天做的这个很好用啊,我给你们演示一下

运行程序后将要加密的文件夹路径输入进去,这里因为要批量进行加解密,怕文件过大加载会太慢,所有加入了内存检测,我这里输入5MB,意思就是只加密5MB内的程序,超过的不进行操作,然后输入密码,密码支持:中文、英文、数字、字符串,随便输一下,然后点回车

 

可以看到已经开始加密了,但是要记住,这是加密不是解密,遇到文件内存大的,需要一点时间,不会太慢,还有,在程序加密或解密的时候尽量不要去停止,因为会丢失数据。

如果你们很介意速度慢,可以自行将内存填小,这样速度就快了

加密完成了 

 我们来进行解密一下,由于我截屏太快,有两个文件没有反应过来

可以看到都进行解密完成了 

废话不多说,完整代码:

import os
import hashlib
import base64
import time


def mine():

    print("-------------------------------------批量加密工具-------------------------------------")
    print("关注博主不迷路!!!\nhttps://jiangongfang.blog.csdn.net/\nhttps://blog.51cto.com/u_15449377")
    print("使用告知:\n【加密后的文件后缀会多出DATAAES-AI,是为了方便软件检测,请勿乱改加密后的后缀名】")
    print("【要加密或解密的文件命名不可有“./\”字符,否则会出错】")
    print("【此程序的密码可以使用中文、英文、字符串、数字进行加密,可使用中文和中文字符串】")
    print("【重点要注意::程序一旦开始加密或解密,中途不可退出,否则会丢失数据,直到运行完毕方可退出】")
    print("-------------------------------------批量加密工具-------------------------------------\n")
    DATA_1 = input('请输入要加密或解密的文件路径(不含文件):')
    if DATA_1 == '':
        print('程序不得为空,请重新输入!!!')
        time.sleep(2)
        os.system('cls')
        mine()
    else:
        pass

    DATA_1 = DATA_1.replace("\\", "/")  # 替换
    if os.path.isdir(DATA_1) == True:
        pass
    else:
        print('路径错误或文件夹不存在,请重新输入!!!')
        time.sleep(2)
        os.system('cls')
        mine()

    str = input('请输入最高可加密的内存MB:')
    # 判断是否填写
    if int(str) == '':
        print('错误,请重新输入!!!')
        time.sleep(2)
        os.system('cls')
        mine()
    else:
        pass

    PassWord_1 = input('请输入要加密或解密的密码(密码):')
    # 判断是否填写
    if PassWord_1 == '':
        print('密码不得为空,请重新输入!!!')
        time.sleep(2)
        os.system('cls')
        mine()
    else:
        pass


    def iterbrowse(path):
        for home, dirs, files in os.walk(path):
            for filename in files:
                yield os.path.join(home, filename)


    for fullname in iterbrowse(DATA_1):
        NAME = fullname
        NAME = NAME.replace("\\", "/")  # 替换

        def get_FileSize(filePath):
            fsize = os.path.getsize(filePath)
            fsize = fsize / float(1024 * 1024)
            size = "%.0f" % fsize
            if int(size) >= int(str):
                print('[-!-]: ',NAME, '\t- - - - 内存过大!!!')
                pass
            else:
                #写入的文件
                if NAME.split(".")[-1][-10:] == 'DATAAES-AI':  # 检测是否是已经加密后的文件,用于检测后缀的DATAAES-AI
                    #解密
                    F = NAME.split(os.path.sep)[0].replace("DATAAES-AI", "")  #去除DATAAES-AI
                    print(f'[-.·J·.-]: ',NAME, '\t- - - - 解密成功!!!')
                else:
                    #加密
                    F = NAME.split(os.path.sep)[0]+"DATAAES-AI"
                    print(f'[+·J·+]: ', NAME, '\t+ + + + 加密成功!!!')




                a = open(NAME, "rb")  #读取文件
                b = open(F, "wb")    #写入文件



                #使用MD5进行加密(双层加密)
                hl = hashlib.md5()
                hl.update(PassWord_1.encode(encoding='utf-8'))
                password_list = hl.hexdigest()
                #使用MD5进行加密(双层加密)
                hl.update(password_list.encode(encoding='utf-8'))
                password_list2 = hl.hexdigest()
                password_data = password_list+password_list2


                #加密
                def Encryption_and_decryption():
                    count = 0  #索引
                    for now in a:
                        for nowByte in now:
                            newByte = nowByte ^ ord(password_data[count % len(password_data)])  #循环遍历出密码的ord值,单个循环
                            count += 1
                            b.write(bytes([newByte]))   #转换
                Encryption_and_decryption()



                a.close()
                b.close()
                os.remove(f'{NAME}')
        get_FileSize(NAME)
    print('操作完成!!!')
    print('正在返回!!!')
    time.sleep(2)
    os.system('cls')
    mine()
mine()

Logo

长江两岸老火锅,共聚山城开发者!We Want You!

更多推荐