首页 > 编程语言 >AES加密算法原理及python实现

AES加密算法原理及python实现

时间:2022-10-02 17:44:22浏览次数:56  
标签:AES 加密 函数 python 明文 分组 加密算法

AES对称加密算法
  AES加密算法即密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法(2000年10月2日,比利时密码专家Joan Daemen和Vincent Rijmen提出的Rijindael),是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。

1.Rijndael的设计思想
  ①抵抗所有已知的攻击。
  ②在多个平台上速度快,编码紧凑。
  ③设计简单。

2.AES的基本结构

  AES为分组密码,分组密码也就是把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文。

  在AES标准规范中,单位分组长度固定是128位,也就是说,每个分组为16个字节(每个字节8位)。密钥的长度可以使用128位、192位或256位。根据不同长度的密钥,推荐加密轮数也不同,造就了不同的AES加密方案,密钥越长,密文安全性越高。

但基于现实,总明文的长度并不总是128的倍数,造成的结果是最后一个待加密的分组不够128位,这时候就需要对最后一个待加密分组进行填充(对称加密算法分组模式中的ECB模式)。

== 本文采用的是对称加密算法的ECB模式 ==

关于加密轮数,因为AES的加密公式为C = E(K,P),在加密函数E中,会执行一种函数10次(粗略),故称之为轮函数,这个轮函数的前9次执行的操作是一样的,只有第10次有所不同。也就是说,一个明文分组会被加密10轮。理解AES的关键在于实现一轮中的所有操作,单调重复。

AES的加密流程示意图如下图:

可以看出,与对称加密算法不同的地方在于AES加密函数和解密函数这两个特殊的加解密过程。
下面简单介绍下各个AES加密算法中各部分的作用与意义:

设有明文P、密钥K、密文C:

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

 

标签:AES,加密,函数,python,明文,分组,加密算法
From: https://www.cnblogs.com/windyrainy/p/16749101.html

相关文章

  • python for循环
    for循环1.1结构:for变量in可迭代对象:statement(s)可迭代对象是指那些元素能够被单独提取出来的对象,比如,字符串;什么是可迭代呢?例如,"FishC",然后每次......
  • Python中变量名后面加冒号是什么意思?
    见过一个大佬写的代码是这样的:user:User=User.objects.filter(id=data.get('uid')).first()变量名后面的冒号是:类型注解,3.6以后加入的,冒号右边是类型,仅仅是注释,有些鸡......
  • 学习python-Day67
    今日学习内容2个视图基类属性说明queryset要序列化的数据serializer序列化类lookup_field(了解)通过get_object获取单个对象的查询key值,value值是......
  • 老猿理解的Python中的垃圾回收机制
    垃圾回收机制(GC)是所有高级语言的标准配置之一。在一定程度上可以优化编程语言的数据处理效率,提高编程软件开发软件的安全性能。Python中的垃圾回收机制主要基于引用计数,......
  • python识别ico hash值
    用python识别icohash值,通过shodan搜索icohash值的网站,网上较为多流行的是用python2写的,但考虑到现在都是python3,这个脚本也跑不起来,所以自己重写了一个python3版本 需......
  • python 查询字符串编码方式
    In[6]:chardet.detect(b'\xc8\xcb\xc9\xfa\xbf\xe0\xb6\xcc\xa3\xac\xce\xd2\xd3\xc3Python')Out[6]:{'encoding':'GB2312','confidence':0.99,'language':'Chinese......
  • 4个Python推导式相关的开发技巧
    对于数据科学,Python通常被广泛地用于进行数据的处理和转换,它提供了强大的数据结构处理的函数,使数据处理更加灵活,这里说的“灵活性”是什么意思?这意味着在Python中总是有......
  • python2与python区别汇总
    目录输入与输出range使用区别字符编码区别输入与输出python2与python3中两个关键字的区别python2中input方法需要用户自己提前指定数据类型写什么类型就是什么类型ra......
  • python关于算法题的输入
    关于Python算法题的输入处理最近在准备蓝桥杯,打算报Python组,所以开始尝试用Python刷算法题。【python&ACM输入输出的处理:sys.stdin.readline().strip().split())】上......
  • supervisor /usr/lib64/python2.7/socket.py line: 224
    配置了supervisor之后,写好了配置,最后发现一直报这个错误,supervisorerror:<class‘socket.error’>,[Errno2]Nosuchfileordirectory:file:/usr/lib64/python2.7/......