admin管理员组文章数量:1639831
话不多说直接上代码
代码版权归本人所有
转载请注明出处
加密文件
软件下载地址
提取码: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()
效果如下
解密文件
软件下载地址
提取码: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()
效果如下
from Crypto.Cipher import AES 出错说明没有安装crypto库
具体安装方法可以参考
https://wwwblogs/shanghongyun/p/11494052.html
加密文件时文件太大会出现内存崩溃
本人电脑性能不太好只测试加密了200M左右大小的文件
再大点的机器有点卡没测试
欢迎小伙伴反馈使用感受
也欢迎小伙伴提出宝贵意见
喜欢我的小伙伴可以打赏呦
版权声明:本文标题:Python 加密文件与解密文件 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1729294799a1194593.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论