python实现AES对文件加解密(这里使用ECB密码本模式)
文章目录
- 1.加密
- 2.解密
- pip install pycryptodome
请注意加解密成功的前提条件
- 加解密密匙key值相同
- 加解密密匙长度相同
- 加解密补长度的逻辑相同
- 加解密的模式相同
1.加密
from Cryptodome.Cipher import AES
import operator# 导入 operator,用于比较原始数据与加解密后的数据
AES_BLOCK_SIZE = AES.block_size # AES 加密数据块大小, 只能是16
AES_KEY_SIZE = 32 # AES 密钥长度(单位字节),可选 16、24、32,对应 128、192、256 位密钥
key = "asdfghjkl" # AES 加解密密钥,如果不足则补,超过则截取# 待加密文本补齐到 block size 的整数倍
def PadTest(bytes):while len(bytes) % AES_BLOCK_SIZE != 0: # 循环直到补齐 AES_BLOCK_SIZE 的倍数bytes += ' '.encode() # 通过补空格(不影响源文件的可读)来补齐return bytes # 返回补齐后的字节列表# 待加密的密钥补齐到对应的位数
def PadKey(key):if len(key) > AES_KEY_SIZE: # 如果密钥长度超过 AES_KEY_SIZEreturn key[:AES_KEY_SIZE] # 截取前面部分作为密钥并返回while len(key) % AES_KEY_SIZE != 0: # 不到 AES_KEY_SIZE 长度则补齐key += ' '.encode() # 补齐的字符可用任意字符代替return key # 返回补齐后的密钥# AES 加密
def EnCrypt(key, bytes):myCipher = AES.new(key, AES.MODE_ECB) # 新建一个 AES 算法实例,使用 ECB(电子密码本)模式encryptData = myCipher.encrypt(bytes) # 调用加密方法,得到加密后的数据return encryptData # 返回加密数据# AES 解密
def DeCrypt(key, encryptData):myCipher = AES.new(key, AES.MODE_ECB) # 新建一个 AES 算法实例,使用 ECB(电子密码本)模式bytes = myCipher.decrypt(encryptData) # 调用解密方法,得到解密后的数据return bytes # 返回解密数据# 主函数,从这里开始执行
if __name__ == '__main__':# ''内是要加密的对象绝对路径,包含后缀名with open('C:\\demo.zip', 'rb') as f: # 以二进制模式打开文件bytes = f.read() # 将文件内容读取出来到字节列表中print('源文件长度:{}'.format(len(bytes)))key = PadKey(key.encode()) # 将密钥转换位字节列表并补齐密钥bytes = PadTest(bytes) # 补齐原始数据print('补齐后的源文件长度:{}'.format(len(bytes)))encrypt = EnCrypt(key, bytes) # 利用密钥对原始数据进行加密decrypt = DeCrypt(key, encrypt) # 利用密钥对加密的数据进行解密# operatorif operator.eq(bytes, decrypt) == True: # 检查原始数据和解密后数据是否一致print('AES 加密成功!')else:print('AES 加密失败,解密数据与元数据不相等')# ''内是要对象加密后生成的文件的绝对路径,后缀名与源文件相同with open('C:\\demo_encrypt.zip', 'wb') as f:f.write(encrypt)f.flush()f.close()
2.解密
from Cryptodome.Cipher import AES# 导入 operator,用于比较原始数据与加解密后的数据
AES_BLOCK_SIZE = AES.block_size # AES 加密数据块大小, 只能是16
AES_KEY_SIZE = 32 # AES 密钥长度(单位字节),可选 16、24、32,对应 128、192、256 位密钥
key = "asdfghjkl" # AES 加解密密钥# 待加密文本补齐到 block size 的整数倍
def PadTest(bytes):while len(bytes) % AES_BLOCK_SIZE != 0: # 循环直到补齐 AES_BLOCK_SIZE 的倍数bytes += ' '.encode() # 通过补空格(不影响源文件的可读)来补齐return bytes # 返回补齐后的字节列表# 待加密的密钥补齐到对应的位数
def PadKey(key):if len(key) > AES_KEY_SIZE: # 如果密钥长度超过 AES_KEY_SIZEreturn key[:AES_KEY_SIZE] # 截取前面部分作为密钥并返回while len(key) % AES_KEY_SIZE != 0: # 不到 AES_KEY_SIZE 长度则补齐key += ' '.encode() # 补齐的字符可用任意字符代替return key # 返回补齐后的密钥# AES 加密
def EnCrypt(key, bytes):myCipher = AES.new(key, AES.MODE_ECB) # 新建一个 AES 算法实例,使用 ECB(电子密码本)模式encryptData = myCipher.encrypt(bytes) # 调用加密方法,得到加密后的数据return encryptData # 返回加密数据# AES 解密
def DeCrypt(key, encryptData):myCipher = AES.new(key, AES.MODE_ECB) # 新建一个 AES 算法实例,使用 ECB(电子密码本)模式bytes = myCipher.decrypt(encryptData) # 调用解密方法,得到解密后的数据return bytes # 返回解密数据# 主函数,从这里开始执行
if __name__ == '__main__':with open('C:\\demo_encrypt.zip', 'rb') as f: # 以二进制模式打开文件bytes = f.read() # 将文件内容读取出来到字节列表中print('源文件长度:{}'.format(len(bytes)))key = PadKey(key.encode()) # 将密钥转换位字节列表并补齐密钥bytes = PadTest(bytes) # 补齐原始数据print('补齐后的源文件长度:{}'.format(len(bytes)))decrypt = DeCrypt(key, bytes) # 利用密钥对加密的数据进行解密print('AES 解密成功!')with open('C:\\demo_decrypt.zip', 'wb') as f:f.write(decrypt)f.flush()f.close()
python实现AES对文件加解密(这里使用ECB密码本模式)相关推荐
- aes加密算法python语言实现_如何用Python实现AES CCM的加解密
1.简介 AES CCM被广泛应用于现代通讯中,在学习过程中需要验证数据的加解密的结果,那么有个方便修改的Python脚本工具就是一个迫切的需求. 2. 实施 我们下面介绍如何实现AES CCM的Py ...
- Python使用AES算法进行加解密
本文要点在于Python扩展库pycrypto实现了大量密码学算法,可以拿来直接使用. import string import random from Crypto.Cipher import AE ...
- java实现对文件加解密操作
源文件: 加密后的文件: 解密后的文件: package com.gblfy.test;import java.io.*;/*** java 实现对文件加解密的方法** @author gblfy* ...
- GPG对文件加解密的简单实现
解密时如何覆盖已经存在的解密后文件,而不是弹出询问框是否覆盖 初识GPG 加解密实现 gui加解密 生成密钥 命令行方式加解密 信任度设置 方法一 方法二 参考链接 解密时如何覆盖已经存在的解密后文件 ...
- 基于CH375的嵌入式USB文件加解密系统的设计
基于CH375的嵌入式USB文件加解密系统的设计 [日期:2008-7-21] 来源:电子技术应用 作者:华中科技大学 电子与信息工程系, 湖北 武汉 430074 [字体:大 中 小] <s ...
- 文件加解密(任意文件类型的文件)
直接上代码: 支持任意类型的文件的加密和解密 可以自由修改密钥 需要修改文件路径 文件加解密. #define _CRT_SECURE_NO_WARNINGS #include <stdlib. ...
- 国密 SM4 文件加解密
国密算法SM4 对文件加解密 说明:调用开源bcprov-jdk15on 加密算法工具,使用SM4算法,对文件进行加密.解密:文件流的操作使用hutool工具包来实现. 引用依赖 <depend ...
- 密码技术应用--AES文件加解密
记录一下对一些稍大文件进行AES加解密的实现,这里只列出了核心代码,其他不涉及的代码或者有任何疑问可以查看我之前写的密码技术专题博客 var key = []byte("1234567812 ...
- 密码技术应用--SM4文件加解密
记录一下对一些稍大文件进行SM4加解密的实现,这里只列出了核心代码,其他不涉及的代码或者有任何疑问可以查看我之前写的密码技术专题博客 var key = []byte("1234567812 ...
最新文章
- 通过data:image/png;base64把图片直接写在src里
- IOS个人开发者账号注册
- 服务器监听端口信息,服务器监听端口信息
- linux除了cat读取文件内容,linux cut命令和cat命令以及查看文件内容命令总结
- 力扣——整数反转(Java)
- POJ 1584 A Round Peg in a Ground Hole(点到直线距离,圆与多边形相交,多边形是否为凸)...
- Javascript阻止表单提交
- 如何在一个月内让QQ农场冲上40级
- 【leetcode】940. Distinct Subsequences II
- tomcat下的公共jar包配置
- 最全计算机基础知识竞赛试题,计算机基础知识竞赛试题.doc
- ffmpeg中使用screen capture recorder录音的问题
- 深度学习教程(8) | AI应用实践策略(上)(吴恩达·完整版)
- 一文极速读懂 KEGG 数据库
- 拖欠银行贷款的后果有哪些
- idea中java文件都不能运行变成橙色文件
- Python实现京东自动登录(自动完成滑块验证)
- Context initialization failed
- ajax后台如何把对象转为json_Ajax向前后台传递json和转换
- 爬虫之极验验证码破解-滑动拼图验证码破解