Python 加密文件与解密文件

话不多说直接上代码
代码版权归本人所有
转载请注明出处

加密文件
软件下载地址
提取码:97h2

# -*- coding: utf-8 -*-
#AES-demo #采用AES对称加密算法
import os
import time
import psutil
import base64
from Crypto.Cipher import AES
#import struct
def add_to_16(value):# str不是16的倍数那就补足为16的倍数
    while len(value) % 16 != 0:
        value += '\0'
    return str.encode(value)  # 返回bytes
def encrypt_oracle():#加密方法
    key = input('\n请设置一个秘钥用于加密文件:')
    time.sleep(1)
    print('\n当被加密文件与本程序不同目录时\n请输入要加密文件完整路径包括文件名以及后缀')
    time.sleep(3)
    print('\n\n当被加密文件与本程序同一目录时只需输入文件名以及后缀:')
    file_path = input('\n\n请输入:')
    filepath,tempfilename = os.path.split(file_path)#filepath源文件所在路径,tempfilename源文件名称包含后缀
    filename,extension = os.path.splitext(tempfilename)#filename源文件名称不包含后缀,extension源文件后缀
    savefile = filename+'已加密'+extension#加密后文件名称
    try:
        try:
            virtualmem = psutil.virtual_memory()#获取本机内存信息
            availablemem = round(virtualmem.available / 3)
            filesize = os.path.getsize(file_path)
            if filesize > availablemem:
                print("\n\n\n加密文件大于系统可用内存可能影响加密效率或出现内存崩溃\n\n\n")
                print('\n\n\n是否继续运行 继续操作请按"y"返回请按"n"\n\n\n')
                temp = input('\n请按键选择')
                if temp == "n" or temp == "N" :
                    encrypt_oracle()
        except:
            print('\n输入有误,请重新输入')
            encrypt_oracle()
        text = open(file_path, 'rb').read()# 待加密文本
        open(file_path, 'rb').close()
    except:
        print('\n输入有误,请重新输入')
        encrypt_oracle()
    text = str(text)
    aes = AES.new(add_to_16(key), AES.MODE_ECB)# 初始化加密器
    encrypt_aes = aes.encrypt(add_to_16(text))#先进行aes加密
    encrypted_text = str(base64.encodebytes(encrypt_aes), encoding='cp936') #用base64转成字符串形式 # 执行加密并转码返回bytes
    if filepath == "":
        logbat = open(savefile, 'w')
        logbat.write(encrypted_text)
        logbat.close()
        print('\n文件加密成功 文件以保存为 ',savefile)
    else:
        logbat = open(filepath+'\\'+savefile, 'w')
        logbat.write(encrypted_text)
        logbat.close()
        print('\n文件加密成功 文件保存在 ',filepath,'中 \n\n文件名为 ',savefile)
    print('\n软件将在 10 秒后自动退出\n')
    time.sleep(10)
if __name__ == '__main__':
    print("\n文件加密 作者:刘英\n\n本软件可单独运行也可以放在被加密文件的所在目录运行\n\n被加密文件名称请不要含有特殊字符\n")
    encrypt_oracle()

效果如下
《Python 加密文件与解密文件》
《Python 加密文件与解密文件》
《Python 加密文件与解密文件》

解密文件
软件下载地址
提取码:ma28

# -*- coding: utf-8 -*-
#AES-demo #采用AES对称加密算法
import os
import time
import base64
from Crypto.Cipher import AES
#import struct
def add_to_16(value):# str不是16的倍数那就补足为16的倍数
    while len(value) % 16 != 0:
        value += '\0'
    return str.encode(value)  # 返回bytes
def decrypt_oralce():#解密方法
    key = input('\n请输入用于解密文件的秘钥:')
    time.sleep(1)
    print('\n当被解密文件与本程序不同目录时\n请输入要解密文件完整路径包括文件名以及后缀')
    time.sleep(3)
    print('\n\n当被解密文件与本程序同一目录时只需输入文件名以及后缀:')
    file_path = input('\n\n请输入:')
    filepath, tempfilename = os.path.split(file_path)
    filename, extension = os.path.splitext(tempfilename)
    try:
        text = open(file_path, 'rb').read()# 待加密文本
        open(file_path, 'rb').close()
    except:
        print('\n输入有误,请重新输入')
        decrypt_oralce()
    savefile = input('\n请输入解密后文件的名字包括后缀 请不要使用特殊符号:')
    text = str(open(file_path, 'r').read())# 密文文件
    open(file_path, 'r').close()
    aes = AES.new(add_to_16(key), AES.MODE_ECB)# 初始化加密器
    base64_decrypted = base64.decodebytes(text.encode(encoding='cp936'))#优先逆向解密base64成bytes
    decrypted_text = str(aes.decrypt(base64_decrypted),encoding='gbk').replace('\0','')#执行解密密并转码返回str
    decrypted_text2 = eval(decrypted_text)
    if filepath == "":
        logbat = open(savefile, 'wb')
        logbat.write(decrypted_text2)
        logbat.close()
        print('\n文件解密成功 文件以保存为 ',savefile)
    else:
        logbat = open(filepath+'\\'+savefile, 'wb')
        logbat.write(decrypted_text2)
        logbat.close()
        print('\n文件解密成功 文件保存在 ',filepath,'中 \n\n文件名为 ',savefile)
    print('\n软件将在 10 秒后自动退出\n')
    time.sleep(10)
if __name__ == '__main__':
    print("\n文件解密 作者:刘英\n\n本软件可单独运行也可以放在被解密文件的所在目录运行\n\n")
    decrypt_oralce()

效果如下
《Python 加密文件与解密文件》
《Python 加密文件与解密文件》
《Python 加密文件与解密文件》

from Crypto.Cipher import AES 出错说明没有安装crypto库
具体安装方法可以参考
https://www.cnblogs.com/shanghongyun/p/11494052.html

加密文件时文件太大会出现内存崩溃
本人电脑性能不太好只测试加密了200M左右大小的文件
再大点的机器有点卡没测试

欢迎小伙伴反馈使用感受
也欢迎小伙伴提出宝贵意见

喜欢我的小伙伴可以打赏呦

    原文作者:liuying7777777
    原文地址: https://blog.csdn.net/weixin_42930696/article/details/103722488
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞