700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > python AES对称加密文件 解密文件

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

时间:2020-10-18 08:45:24

相关推荐

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

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

该加解密的秘钥是自己输入的密码加电脑固定序列号,包括网卡MAC地址、CPU序列号、硬盘序列号、主板序列号、BIOS序列号。

这样可以保证加密文件只能在加密时的计算机打开,在其他人的计算机无法打开,不想用这个功能的可以在生成秘钥那里把序列号删掉。

序列号的获取参考我写的这篇文章:

/weixin_42845306/article/details/114899172

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

加密部分的代码如下:

#引用获取序列号的函数import osfrom Crypto.Cipher import AESfilename=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:#秘钥不能超过32key=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 osfrom Crypto.Cipher import AESfilename=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:#秘钥不能超过32key=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位。我看某乎有人问过:

这样我就放心多了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。