0 AES简介

美国国家标准技术研究所在2001年发布了高级加密标准(AES)。AES是一个对称分组密码算法,旨在取代DES成为广泛使用的标准。

根据使用的密码长度,AES最常见的有3种方案,用以适应不同的场景要求,分别是AES-128、AES-192和AES-256。本文主要对AES-128进行介绍,另外两种的思路基本一样,只是轮数会适当增加。

1 算法流程

AES加解密的流程图如下:

AES加密过程涉及到4种操作:字节替代(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和轮密钥加(AddRoundKey)。解密过程分别为对应的逆操作。由于每一步操作都是可逆的,按照相反的顺序进行解密即可恢复明文。加解密中每轮的密钥分别由初始密钥扩展得到。算法中16字节的明文、密文和轮密钥都以一个4x4的矩阵表示。

接下来分别对上述5种操作进行介绍。

1.1 字节代替

字节代替的主要功能是通过S盒完成一个字节到另外一个字节的映射。S盒的详细构造方法可以参考文献[1]。

下图(a)为S盒,图(b)为S-1(S盒的逆)。

S和S-1分别为16x16的矩阵。假设输入字节的值为a=a7a6a5a4a3a2a1a0,则输出值为S[a7a6a5a4][a3a2a1a0],S-1的变换也同理。

例如:字节00替换后的值为(S[0][0]=)63,再通过S-1即可得到替换前的值,(S-1 [6][3]=)00。

1.2 行移位

行移位的功能是实现一个4x4矩阵内部字节之间的置换。

1.2.1 正向行移位

正向行移位的原理图如下:

实际移位的操作即是:第一行保存不变,第二行循环左移1个字节,第三行循环左移2个字节,第四行循环左移3个字节。假设矩阵的名字为state,用公式表示如下:state’[i][j] = state[i][(j+i)%4];其中i、j属于[0,3]

1.2.2 逆向行移位

逆向行移位即是相反的操作,用公式表示如下:state’[i][j] = state[i][(4+j-i)%4];其中i、j属于[0,3]

1.3 列混淆

列混淆:利用GF(28)域上算术特性的一个代替。

1.3.1 正向列混淆

正向列混淆的原理图如下:

根据矩阵的乘法可知,在列混淆的过程中,每个字节对应的值只与该列的4个值有关系。此处的乘法和加法都是定义在GF(28)上的,需要注意如下几点:

1) 将某个字节所对应的值乘以2,其结果就是将该值的二进制位左移一位,如果该值的最高位为1(表示该数值不小于128),则还需要将移位后的结果异或00011011;[1]

2) 乘法对加法满足分配率,例如:07·S0,0=(01⊕02⊕04)·S0,0= S0,0⊕(02·S0,0)(04·S0,0)

3) 此处的矩阵乘法与一般意义上矩阵的乘法有所不同,各个值在相加时使用的是模2加法(相当于是异或运算)。

假设某一列的值如下图,运算过程如下:

同理可以求出另外几个值。

1.3.2 逆向列混淆

逆向列混淆的原理图如下:

由于:

说明两个矩阵互逆,经过一次逆向列混淆后即可恢复原文。

1.4 轮密码加

任何数和自身的异或结果为0。加密过程中,每轮的输入与轮密钥异或一次;因此,解密时再异或上该轮的密钥即可恢复输入。

1.5 密钥扩展

密钥扩展的原理图如下:

密钥扩展过程说明:

1)  将初始密钥以列为主,转化为4个32 bits的字,分别记为w[0…3];

2)  按照如下方式,依次求解w[j],其中j是整数并且属于[4,43];

3)  若j%4=0,则w[j]=w[j-4]⊕g(w[j-1]),否则w[j]=w[j-4]⊕w[j-1];

函数g的流程说明:

4)  将w循环左移一个字节;

5)  分别对每个字节按S盒进行映射;

6)  与32 bits的常量(RC[j/4],0,0,0)进行异或,RC是一个一维数组,其值如下。(RC的值只需要有10个,而此处用了11个,实际上RC[0]在运算中没有用到,增加RC[0]是为了便于程序中用数组表示。由于j的最小取值是4,j/4的最小取值则是1,因此不会产生错误。)

RC = {00, 01, 02, 04, 08, 10, 20, 40, 80, 1B, 36}

2 源码

在GitHub上找到的AES实现代码,感觉写得不错。

https://github.com/dhuertas/AES/blob/master/aes.c

3 参考文献

[1] William Stallings著;王张宜等译. 密码编码学与网络安全——原理与实践(第五版)[M]. 北京:电子工业出版社,2011.1.

aes解密流程图_AES加密算法详解相关推荐

  1. aes解密流程图_aes流程图

    PPT模板流程图_动物植物_PPT模板_实用文档.POWER YOUR POIN... 图1.1 AES加密算法流程图 二,AES加密算法复杂度分析下面对改进前的算法和... AES 算法的工作流程图 ...

  2. [crypto]-02-非对称加解密RSA原理概念详解

    说明:本文使用的数据来自网络,重复的太多了,也不知道哪篇是原创. 算法原理介绍 step 说明 描述 备注 1 找出质数 P .Q - 2 计算公共模数 N = P * Q - 3 欧拉函数 φ(N) ...

  3. 密码学:RSA加密算法详解

    概述 本文旨在说明RSA加密算法的原理及实现,而其相关的数学部分的证明则不是本文内容. 版权说明 著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:Q-WHai 发表日期: ...

  4. aes解密流程图_基于AES和混沌的图像加密方法与流程

    本发明涉及一种信息加密技术,特别是涉及一种图像加密方法. 背景技术: 在军事系统.电子政务.金融系统以及日常生活等领域,每天都会产生大量的图像.为保护这些图像信息内容不被窃取,图像加密技术引起了学术界 ...

  5. openssl_sign() 语法+RSA公私钥加密解密,非对称加密算法详解

    其实有时候觉得写博客好烦,就个函数就开篇博客.很小的意见事情而已,知道的人看来多取一举,或者说没什么必要,浪费时间,不知道的人就会很郁闷.技术就是这样的,懂的人觉得真的很简单啊,不知道的人真的好难.. ...

  6. 加密算法详解AES/HmacSHA1/DES

    byte[] raw = sKey.getBytes("utf-8");SecretKeySpec skeySpec = new SecretKeySpec(raw, " ...

  7. c# php加解密,PHP和C#可共用的可逆加密算法详解

    在一些项目中要求在php中生成加密,然后在asp.net中接受过来的密码再解密,下面和大家分享一个PHP与asp.net C#可共用的可逆加密算法,感兴趣的可以参考参考. php加密算法: class ...

  8. RSA加密算法详解及例题

    这是我自己在学习RSA加密算法的时候自己整理的笔记,如需转载请注明出处 RSA加密算法 我这里就不对RSA的发明背景做介绍了,你只要知道RSA加密算法是非常非常重要的加密算法,放在现在的时代亦是如此. ...

  9. java公钥加密私钥解密_公钥加密,私钥解密示例程序(JAVA)详解

    公钥与私钥机制属于非对称加密的范畴,非对称是相对于对称加密而言的,对称加密用于加密与解密的密钥是同一把,而非对称加密则用于加密与解密的密钥不相同,一个公开,称为公钥:一个保密,称为私钥,公钥与私钥必须 ...

  10. rsa加密算法java实例,java实现的RSA加密算法详解

    本文实例讲述了java实现的RSA加密算法.分享给大家供大家参考,具体如下: 一.什么是非对称加密 1.加密的密钥与加密的密钥不相同,这样的加密算法称之为非对称加密 2.密钥分为:公钥,私钥 公钥:可 ...

最新文章

  1. mysql 中文搜索插件_支持中文的MySQL 5.1+ 全文检索分词插件
  2. affectnet数据集_处理表情识别中的坏数据:一篇CVPR 2020及两篇TIP的解读
  3. 运维利器1-supervisor
  4. 【PAT乙级】1088 三人行 (20 分)
  5. python实现rm_python winrm模块使用
  6. 华为发布最强服务器芯片,[百家号]华为:最强ARM服务器芯片,华为鲲鹏920处理器发布...
  7. 我的机器人现在无处可去。 无家可归。 无服务器。
  8. mysql删除盘点表,用友U8数据库表名参照表修改号参考.doc
  9. python玩王者荣耀皮肤碎片怎么获得_教你用Python代码免费获取王者荣耀全英雄皮肤...
  10. mybatis实战总结
  11. json字符生成Java实体类--用好bejson
  12. SAXReader 解析xml
  13. Xposed框架分析
  14. mysql 多字段求和_sql数据库多字段求和
  15. 【转】【Coursera公开课】Applying to U.S. Universities(如何申请美国大学)笔记
  16. 传感器与检测技术考试
  17. 【零基础微信小程序】基于百度大脑人像分割的证件照换底色小程序实战开发
  18. ICLR2020推荐阅读论文50篇
  19. 【算法】最短路径之Bellman-Ford
  20. 豆瓣的架构—专访豆瓣网站的技术总监洪强宁

热门文章

  1. 用JS做关灯游戏(初级)
  2. 使用Telnet客户端测试Exchange邮件收发
  3. Spring Mvc前台访问报404
  4. 【lpxt】笔者支招:九招搞定显示器黑屏
  5. Lucene为不同字段指定不同分词器(转)
  6. 关系型数据库一致性的理解
  7. hibernate必须知道的知识
  8. 马云达沃斯金句:蠢是最大的疾病 比癌症还坏
  9. 2013B题碎纸片拼接
  10. 原子性 - synchronized关键词