一、对称加密

对称加密:需要对加密解密使用相同密钥的加密算法。
优点:速度快,适合加密大量数据时使用。
缺点:不利于传送密钥。(后面文章在介绍非对称加密传输对称加密的密钥,此处应用是文件加密,密钥只有自己知道)

对称加密的本质是密钥与明文进行异或运算,因此速度非常快,某些情况下还可以进行并行加密(OFB模式)

对称加密有五种模式,分别是:
1.电码本模式(Electronic Codebook Book (ECB))
2.密码分组链接模式(Cipher Block Chaining (CBC))
3.密码反馈模式(Cipher FeedBack (CFB))
4.输出反馈模式(Output FeedBack (OFB))
5.计算器模式(Counter (CTR))(不常见,不做介绍)

1.1 ECB模式

ECB模式是将整个明文分成若干段相同的小段,然后对每一小段进行加密。
解密过程直接将图中原文与密文位置互换即可

1.2 CBC 模式

CBC模式是先将明文切分成若干小段,然后每一小段与初始块或者上一段的密文段进行异或运算后,再与密钥进行加密。
解密过程直接将图中向 “” 的箭头反过来变成向上的,再用同样的算法与密钥进行解密。

1.3 CFB模式

CFB模式是先将明文切分成若干小段,对上一个密文进行加密处理(第一次就用初始画向量),然后与明文块进行异或,得到新的密文,再重复上述操作
解密过程直接将图中向 “” 的箭头反过来变成向上的,注意,解密的过程同加密,第一步仍然是对初始化向量IV进行加密,然后与密文1进行异或,得到明文1,之后的过程同样操作,直到最后一个解密完成

1.4 OFB模式

OFB模式是先将明文切分成若干小段,不断的对初始化向量进行加密,将加密的结果与明文进行异或,最终得到密文。
解密过程直接将图中向 “” 的箭头反过来变成向上的,注意,解密的过程同加密,第一步仍然是对初始化向量IV进行加密,然后与密文1进行异或,得到明文1,之后的过程同样操作,直到最后一个解密完成(文字同CFB)

1.5 CFB 模式与 OFB 模式对比

上面讲的 CFB 与 OFB,在同片与文字上有相近的地方,将不同点进行局部放大,观察 CFB 与 OFB 的差异,有助于对这两个加密模式的理解,总的来说,OFB 就是不断对初始化向量进行加密,再与明文异或,CFB是不断的对密文进行加密,在与新的明文异或。

二、Python 密码库——Cryptodome

后续再补充

三、用python实现文件加密

from Cryptodome.Cipher import AES
import operator                     # 导入 operator,用于比较原始数据与加解密后的数据AES_BLOCK_SIZE = AES.block_size     # AES 加密数据块大小, 只能是16
AES_KEY_SIZE = 16                   # AES 密钥长度(单位字节),可选 16、24、32,对应 128、192、256 位密钥
key = "ok let's go"                 # 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('testfile/source.c', 'rb') as f:          # 以二进制模式打开文件bytes = f.read()                                # 将文件内容读取出来到字节列表中print('源文件长度:{}'.format(len(bytes)))key = PadKey(key.encode())                          # 将密钥转换位字节列表并补齐密钥bytes = PadTest(bytes)                              # 补齐原始数据print('补齐后的源文件长度:{}'.format(len(bytes)))encryptTest = EnCrypt(key, bytes)                   # 利用密钥对原始数据进行加密decryptTest = DeCrypt(key, encryptTest)             # 利用密钥对加密的数据进行解密if operator.eq(bytes, decryptTest) == True:         # 检查加解密是否成功print('AES 加解密成功!')else:print('AES 加解密失败,解密数据与元数据不相等')

详解AES对称加密(python实现文件加密)相关推荐

  1. 详解js对称加密和非对称加密

    详解js对称加密和非对称加密 https保证数据在传输过程中不被窃取和篡改,从而保证传输安全 1.加密 对称加密:产生一个密钥,可以用其加密,可以用其加密,也可以用其加解密. 这个密钥可以是任何东西, ...

  2. 详解rsync算法--如何减少同步文件时的网络传输量

    详解rsync算法--如何减少同步文件时的网络传输量 先看下图中的场景,客户端A和B,以及服务器server都保存了同一个文件,最初,A.B和server上的文件内容都是相同的(记为File.1).某 ...

  3. 【人脸识别】人脸验证算法Joint Bayesian详解及实现(Python版)

    人脸验证算法Joint Bayesian详解及实现(Python版) Tags: JointBayesian DeepLearning Python 本博客仅为作者记录笔记之用,不免有很多细节不对之处 ...

  4. 极智AI | 量化实现分享二:详解 KL 对称量化算法实现

      欢迎关注我的公众号 [极智视界],回复001获取Google编程规范   O_o   >_<   o_O   O_o   ~_~   o_O   大家好,我是极智视界,本文剖析一下 K ...

  5. 共享文件夹加密专家_文件加密软件哪家靠谱?

    软件加密行业,早已有许多类型的加密软件.公司文件需要做好保密措施,尤其需求文件加密软件.近些年来必不可少的文件加密软件发展非常的好,尤其随着技术的进一步提升,所能为文件管理实现的保障价值更全面和更完善 ...

  6. 基于python的文件加密传输_python 利用Crypto进行AES解密加密文件

    背景:工作需要,部分数据进行了加密传输,对方使用了AES对密码进行了加密,需要获取到解密的数据. 目标:通过密钥成功解密文件. 关键词:AES_ECB,AES_CBC,Java和Python的AES加 ...

  7. 【python】详解zipfile模块读取处理压缩文件实例

    zipfile是python里用来做zip格式编码的压缩和解压缩的,由于是很常见的zip格式,所以这个模块使用频率也是比较高的. zipfile模块常用的一些操作和方法: 一.is_zipfile(f ...

  8. 对称加密AES代码实现,实现文件加密与解密

    1.建立两个文件jiami.py jiemi.py 2.代码实现(能运行,但有瑕疵,还没完全改好) 加密 from Cryptodome.Cipher import AES import operat ...

  9. 什么是AES加密?详解AES加密算法原理流程

    在密码学中,加密算法分为双向加密和单向加密.单向加密包括MD5.SHA等摘要算法,它们是不可逆的.双向加密包括对称加密和非对称加密,对称加密包括AES加密.DES加密等.双向加密是可逆的,存在密文的密 ...

最新文章

  1. 【AI】图示:精确度(查准率)Precision、召回率(查全率)Recall
  2. 算法_棋盘型高维动态规划
  3. 源 arm_arm和X86处理器性能简单测试
  4. git 只允许 源码_如何阻止离职员工盗窃公司源码?你一定要知道的三种方案
  5. 产品说,我只需要一个有亿点复杂的查询界面
  6. Windows命令行下的进程管理
  7. mysql没有写入权限_MySQL的权限系统
  8. Python学习入门10:零基础如何开始学习 Python?从小白变大牛!
  9. React Native 开发豆瓣评分(六)添加字体图标
  10. iOS:ASIHttpRequest虽不更新,但仍值得详细了解
  11. 《通关!游戏设计之道》学习笔记
  12. 计算机串口接打印机并口,电子连接系统上的串口和并口知识分享
  13. Frida android抓包
  14. 官方免费数据下载全国行政区划具体到村
  15. 用计算机测缘分,用两人的姓名测姻缘 免费测试两个人的缘分
  16. Permission denied: user=dr.who, access=READ_EXECUTE, inode=/user/root:root:supergroup:drwx------
  17. Spring 的 init-method 和 destory-method
  18. 从服务器收到意料之外的响应,WordPress出现“从服务器收到预料之外的响应。此文件可能已被成功上传。请检查媒体库或刷新本页。”错误的解决方法...
  19. PKI基础知识,及PKI流程
  20. Watson出现误诊遭质疑,智能医疗到底靠不靠谱

热门文章

  1. 无线投屏没有网络也可以投屏吗?
  2. ARM SMMUv3 architecture
  3. 嵌入式操作系统VxWorks简介
  4. 基于android的互动健身平台,基于Android的健身助手APP设计与实现
  5. 创意休闲手游《急速感染》震撼来袭~
  6. Linux下samba的安装与配置
  7. c语言函数大全表格形式,C语言函数大全[表格形式].doc
  8. 思科交换机配置试题_cisco交换机配置简单教程.doc
  9. ASO免费优化技巧:小米应用首发,小米aso优化怎么做
  10. HTML怎么设置下划线?html文字加下划线方法