python AES对称加密文件、解密文件
咱也不是学计算机的,咱也不是学网络安全的,咱更不是学密码学的,所以东拼西凑一堆代码,能用就行。
该加解密的秘钥是自己输入的密码加电脑固定序列号,包括网卡MAC地址、CPU序列号、硬盘序列号、主板序列号、BIOS序列号。
这样可以保证加密文件只能在加密时的计算机打开,在其他人的计算机无法打开,不想用这个功能的可以在生成秘钥那里把序列号删掉。
序列号的获取参考我写的这篇文章:
https://blog.csdn.net/weixin_42845306/article/details/114899172
我下面的代码,就不写获取序列号的函数了。
加密部分的代码如下:
#引用获取序列号的函数
import os
from 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 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:#秘钥不能超过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位。我看某乎有人问过:
这样我就放心多了。
python AES对称加密文件、解密文件相关推荐
- 编写ATL工程实现ActiveX控件调用cryptoAPI接口(三)------------AES对称加密与解密
注:下面的代码中用了Map,Base64,log,Result等都为自定义类型,太长就不一一贴出. [cpp] view plain copy print ? /* * * * 文件名称:Enc ...
- AES对称加密和解密算法以及Java的AES工具类
参考资料:百度百科[高级加密标准] AES简介 1.密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块 ...
- Python代码实现MD5、AES对称加密和RSA非对称加密以及OpenSSl实践
1.MD5加密算法 1.1 MD5加密的特点 不可逆运算 对不同的数据加密的结果是定长的32位和16位字符(不管文件多大都一样) 对相同的数据加密,得到的结果是一样的(也就是复制). 抗修改性 :信息 ...
- 如何在 Linux 上用密码加密和解密文件
age 是一个简单的.易于使用的工具,允许你用一个密码来加密和解密文件.age 能帮你这样做.它是一个小型且易于使用的工具,允许你用一个密码加密一个文件,并根据需要解密. age 是一个简单的.易于使 ...
- 如何使用 Visual C# 加密和解密文件
本文引入的命名空间: System.IO System.Security System.Security.Cryptography 本文介绍如何使用 Microsoft .NET Framework ...
- Linux下使用GPG(GnuPG)加密及解密文件
文章目录 Linux下使用GPG(GnuPG)加密及解密文件 1. 简介 2.环境及版本 3.GPG公钥生成 4.查看公钥 5.查看私钥 6.导出公钥 7.导出私钥 8.加密文件 本机加密 其他电脑加 ...
- Python - AES SHA1PRNG 加密解密总结
Python - AES SHA1PRNG 加密解密总结 Max.Bai 2020-11 上篇文章是当时研究AES加密的时候的记录,来龙去脉可以取看这篇 python3 - AES 加密实现java中 ...
- linux 怎么不检查gpg,如何在Linux上使用GPG加密和解密文件 | MOS86
如何在Linux上使用GPG加密和解密文件... GnuPrivacy Guard (GPG) allows you to securely encrypt files so that only th ...
- RSA加密及AES对称加密代码实现
最近老师布置了两个加密的作业,记录一下编码过程及遇到的问题. 对于RSA解密基本内容这里就不赘述,直接说一下编码过程把: 1:N = p*q(p.q互质,即公约数只有1)可以用辗转相除去判断 2:L是 ...
最新文章
- git 覆盖本地修改_Git拉力–如何使用Git覆盖本地更改
- 多线程_yield()和sleep()方法比较
- jQuery Ajax全解析
- Android Touch系统简介(二):实例详解onInterceptTouchEvent与onT
- Cocos2d-X中的ZORDER和Tag
- 初识Mysql(part5)--我需要知道的11条Mysql语句之过滤
- Python参数类型
- python截图直接在内存里调用_Python-按块上传FTP中的内存文件(由API调用生...
- 一台弹性云服务器可以挂载多块磁盘吗?
- 前端显示文本时的格式设置
- thinkphp遗留问题
- C语言程序设计型考册作业1,C语言程序设计作业 求解答
- Bitmap头文件说明
- 存量用户时代,方兴未艾的客户服务SaaS
- 安利一下好用免费的思维导图绘制软件(实在篇)
- 面试产品经理时如何回答“为什么想做产品经理”这个问题
- 核心层,汇聚层,接入层,交换机性能差别
- PS 常用工具使用汇总
- GBase 8c索引类型
- NYOJ 817 英文藏头诗
热门文章
- swift中的只读属性实现,很简单
- Mapped Statements collection already contains value for*
- timestamp和recycle同时开启,导致连接成功率降低
- 操作系统复习笔记(二)
- Linux的企业-Codis 3集群搭建详解
- “朝阳群众”APP上线!解读怎么做一款深入群众的应用
- JavaScript权威指南 - 数组
- javascript arguments对象研究--针对jquery源码研究再研究
- Windows7下通过VHD安装Windows8系统
- Windows NT Backup - 恢复工具 - Windows Vista的迁移工具