python AES对称加密文件、解密文件

咱也不是学计算机的,咱也不是学网络安全的,咱更不是学密码学的,所以东拼西凑一堆代码,能用就行。

该加解密的秘钥是自己输入的密码加电脑固定序列号,包括网卡MAC地址、CPU序列号、硬盘序列号、主板序列号、BIOS序列号。
这样可以保证加密文件只能在加密时的计算机打开,在其他人的计算机无法打开,不想用这个功能的可以在生成秘钥那里把序列号删掉。
序列号的获取参考我写的这篇文章:
https://blog.csdn.net/weixin_42845306/article/details/114899172

我下面的代码,就不写获取序列号的函数了。

加密部分的代码如下:

#引用获取序列号的函数
import os
from Crypto.Cipher import AES

filename=input("请输入要加密的文件名:")
key=input("请输入密码:")
#秘钥,此处需要将字符串转为字节
key = key+get_bios_id()+get_cpu_id()+get_board_id()+get_disk_id()+get_mac_address()
key = str.encode(key)
if len(key)>32:#秘钥不能超过32
    key=key[0:32]

#加密内容需要可以被16整除,所以进行空格拼接
def pad(text):
    while len(text) % 16 != 0:
        text += b' '
    return text
#加密秘钥需要可以被16整除,所以进行空格拼接
def pad_key(key):
    while len(key) % 16 != 0:
        key += b' '
    return key
#进行加密算法,模式ECB模式,把叠加完的秘钥传进来
aes = AES.new(pad_key(key), AES.MODE_ECB)
#加密内容,此处需要将字符串转为字节

data = bytearray(os.path.getsize(filename))    
with open(filename, 'rb') as f:        
	f.readinto(data)    
	f.close()    

#将数据传入加密类中,结果为字节类型
encrypted_data = aes.encrypt(pad(data))

with open(filename+"_encryption", 'ba') as f:
    f.write(encrypted_data)
f.close()

print("成功,请查看文件夹下"+filename+"_encryption")

解密部分的代码如下:

#引用获取序列号的函数
import os
from Crypto.Cipher import AES
filename=input("请输入要解密的文件名:")
key=input("请输入密码:")
#秘钥,此处需要将字符串转为字节
key = key+get_bios_id()+get_cpu_id()+get_board_id()+get_disk_id()+get_mac_address()
key = str.encode(key)
if len(key)>32:#秘钥不能超过32
    key=key[0:32]

#加密秘钥需要可以被16整除,所以进行空格拼接
def pad_key(key):
    while len(key) % 16 != 0:
        key += b' '
    return key
#进行加密算法,模式ECB模式,把叠加完的秘钥传进来
aes = AES.new(pad_key(key), AES.MODE_ECB)


#下面是解密
data = bytearray(os.path.getsize(filename))    
with open(filename, 'rb') as f:        
	f.readinto(data)    
	f.close()    
decryption_data = aes.decrypt(data)
#将数据传入加密类中,结果为字节类型

with open(filename+"_decryption", 'ba') as f:
    f.write(decryption_data)
f.close()

print("成功,请查看文件夹下"+filename+"_decryption")

我也不会密码学,不知道这个AES被破解的几率有多大。这里用到的秘钥最长32字节,32x8=256位。我看某乎有人问过:
在这里插入图片描述
这样我就放心多了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值