文章目录

  • AES 加密
    • 一、前言
      • 1、 简介
      • 2、 加密模式
      • 3、 环境配置
    • 二、算法实现

AES 加密

一、前言

1、 简介

AES,高级加密标准(Advanced Encryption Standard)。是用来替代 DES,目前比较流行的对称加密算法。对称加密算法就是加密和解密用相同的密钥,具体的加密流程如下图

明文 P:等待加密的数据。

密钥 K:用来加密明文的密码,在对称加密算法中,加密与解密的密钥是相同的。密钥为接收方与发送方协商产生,但不可以直接在网络上传输,否则会导致密钥泄漏,通常是通过非对称加密算法加密密钥,然后再通过网络传输给对方,或者直接面对面商量密钥。密钥是绝对不可以泄漏的,否则会被攻击者还原密文,窃取机密数据。

AES 加密函数:设 AES 加密函数为 E,则 C = E(K, P),其中 P 为明文,K 为密钥,C 为密文。也就是说,把明文 P 和密钥 K 作为加密函数的参数输入,则加密函数 E 会输出密文 C。

密文 C:经过 AES 加密后的数据。

AES 解密函数:设 AES 解密函数为 D,则 P = D(K, C),其中 C 为密文,K 为密钥,P 为明文。也就是说,把密文 C 和密钥 K 作为解密函数的参数输入,则解密函数会输出明文 P。

2、 加密模式

AES 只是个基本算法,实现 AES 有几种模式,主要有 ECB、CBC、CFB 和 OFB 这几种(其实还有个 CTR)

  1. 电码本模式(ECB)

    这种模式是将整个明文分为若干段相同的小段,然后对每一小段进行加密

  2. 密码分组链接模式(CBC)

    这种模式是先将明文分成若干小段,然后每一小段与初始块或者上一段的密文段进行异或运算后再与密钥进行加密

  3. 计算器模式(CTR)

    完全的流模式。将瞬时值与计数器连接起来,然后对此进行加密产生密钥流的一个密钥块,再进行XOR操作

  4. 密码反馈模式(CFB)

    把分组密码当做流密码使用,即密码反馈模式可将DES分组密码置换成流密码。流密码具有密文和明文长度一致、运行实时的性质,这样数据可以在比分组小得多的单元里进行加密。如果需要发送的每个字符长为8比特,就应使用8比特密钥来加密每个字符。如果长度超过8比特,则造成浪费。但是要注意,由于CFB模式中分组密码是以流密码方式使用,所以加密和解密操作完全相同,因此无法适用于公钥密码系统,只能适用于对称密钥密码系统

  5. 输出反馈模式(OFB)

    密码算法的输出(指密码key而不是密文)会反馈到密码算法的输入中,OFB模式并不是通过密码算法对明文直接加密,而是通过将明文分组和密码算法的输出进行XOR来产生密文分组

3、 环境配置

  1. 安装
pip install pycryptodomex
  1. 导包
from Crypto.Cipher import DES  # 导入模块进行加密

二、算法实现

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: A.L.Kun
# @file : test.py
# @time : 2022/4/25 6:22
import binascii  # 进行进制的转换
from Crypto.Cipher import DES  # 导入DES模块
from Crypto import Random  # 进行随机的偏移量# 加密函数
def encryption(key, iv, data):""":param key:加密密钥,8位数据:param iv: 偏移量,Only applicable for ``MODE_CBC``, ``MODE_CFB``, ``MODE_OFB``,and ``MODE_OPENPGP`` modes,并且长度必须为8:param data: 要加密的数据:return: 返回密文"""cipher = DES.new(key, DES.MODE_CFB, iv)  # 创建加密对象,以及加密规则data = cipher.encrypt(data.encode())  # 对数据进行编码后进行加密return binascii.b2a_hex(data)  # 得到加密后的16进制数据# 解密函数
def decryption(key, iv, data):"""DES解密函数"""data = binascii.a2b_hex(data)  # 把十六进制的密文数据转换成二进制数据decipher = DES.new(key, DES.MODE_CFB, iv)  # 创建相同的解密规则return decipher.decrypt(data).decode()  # 进行解码keys = b"maqudong"  # 密钥
iv = Random.new().read(8)  # 随机偏移量data = "一寸相思千万绪,人间每个安排处"ret = encryption(keys, iv, data)
r_ret = decryption(keys, iv, ret)
print(r_ret)

from Crypto.Cipher import AES # 进行AES加密,方法和DES加密类似,还有一些参数长度的变化,请通过源码查看

Python中的AES加密相关推荐

  1. 探讨.NET Core中实现AES加密和解密以及.NET Core为我们提供了什么方便!

    前言 对于数据加密和解密每次我都是从网上拷贝一份,无需有太多了解,由于在.net core中对加密和解密目前全部是统一了接口,只是做具体的实现,由于遇到过问题,所以将打算基本了解下其原理,知其然足矣, ...

  2. 解密HLS中的AES加密

    解密HLS中的AES加密 主题 加密解密 如果m3u8文件中包含#EXT-X-KEY字段,那么可以断定这个HLS中的ts文件是被加密的,如: #EXTM3U#EXT-X-VERSION:3#EXT-X ...

  3. javascript 解密_Javascript中的AES加密和Java中的解密

    javascript 解密 AES代表高级加密系统,它是一种对称加密算法,很多时候我们需要在客户端加密一些纯文本,例如密码,然后将其发送到服务器,然后由服务器解密以进行进一步处理.AES加密和解密更加 ...

  4. Java中的AES加密和解密(CBC模式)

    通过有线方式传输诸如纯文本密码之类的机密数据总是容易受到安全性的影响,始终建议对此类信息进行加密并使用SSL传输这些机密数据.Java为此提供了多种加密算法.在本文中,我们将讨论Java中具有CBC模 ...

  5. Javascript中的AES加密和Java中的解密

    AES代表高级加密系统,它是一种对称加密算法,很多时候我们需要在客户端加密一些纯文本(例如密码)并将其发送到服务器,然后由服务器解密以进行进一步处理.AES加密和解密更加容易在相同的平台(例如Andr ...

  6. 使用as3crypto在Flex中实现AES加密

    要在Flex中实现AES加密,可以通过as3crypto实现.但是as3crypto本身的用法比较复杂,一般是封装一下再调用. 下面是9RIA上的一篇文章给出的一个实现,使用中稍感不方便(见注释): ...

  7. Python学习笔记——AES 加密/解密

    前言: AES,高级加密标准.目前比较流行的对称加密算法.是一种对称加密算法,即加密和解密都用相同的密钥. AES只是个基本算法,实现AES有几种模式,主要有ECB.CBC.CFB等几种模式.CBC模 ...

  8. AES加密解密的基本原理与Python爬取AES加密接口

    大家好,我是小小明,今天我要带大家学习AES加密的基本原理,并爬取一个经过AES加密的接口.一起来学习吧! AES编码解码基础 AES简介 AES(Advanced Encryption Standa ...

  9. nodejs与javascript中的aes加密

    简介 1.aes加密简单来说,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用.高级加密标准已然成为对称密钥加 ...

最新文章

  1. Modeling Filters and Whitening Filters
  2. java怎样读txt文件_【后端开辟】java怎样读写txt文件?
  3. AngularJS 学习笔记 - $http.post 跟后台交互
  4. char s[] 和 char *s 的区别
  5. 区块链BaaS云服务(27)米链科技 HSpeed链
  6. Account mobile phone in CRM and C4C
  7. 如何根据离散点自动绘制等值线(等高线)之 三角形法
  8. 再谈AbstractQueuedSynchronizer3:基于AbstractQueuedSynchronizer的并发类实现
  9. Comparable与Comparator对比
  10. 每日算法系列【LeetCode 319】灯泡开关
  11. 力扣-692 前k个高频单词
  12. 深度强化学习之稀疏奖励(Sparse Reward)
  13. 联想m7400更换墨粉盒怎么清零_联想M7400、7600打印机换粉盒或加碳粉后,仍提示缺粉?联想7400、7600硒鼓加粉清零图解...
  14. 老徐自述:《软件自动化测试实战解析_基于Python3编程语言》
  15. 华为云主机无法ping通外网,xshell远程连接不上
  16. 物体成瘾性_如何克服数字成瘾和更多的意志力
  17. 微信打不开文件怎么办
  18. blender 绘制离散顶点, SMPL骨架绘制
  19. 高性能低功耗服务器cpu,六核仅35W:AMD披露超低功耗服务器CPU
  20. Redis 布隆过滤器

热门文章

  1. 迪赛智慧数——柱状图(极坐标扇图):2022年中国露营消费者会购买的露营装备
  2. 基于web的计算机配件销售系统,基于ASP.NET的计算机配件销售企业门户网站系统...
  3. CSDN博客周刊·2008年第6期
  4. 赛马网基本算法之--将功赎过
  5. java jmap_java性能监控工具:jmap命令详解
  6. S5P4418裸机开发(十二):IRQ (按键中断) 串口中断
  7. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java图书销售网站v040m
  8. PHP在线智能AI文章伪原创系统源码
  9. #模拟#洛谷 1338 末日的传说
  10. c++飞机大战+备注(代码免费复制)