http://www.mamicode.com/info-detail-514466.html
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加密原理-详解相关推荐

  1. base64加密原理详解

    base64加密原理详解 声明:本文是在看了他人总结,并摘抄大部分图文,和少量自己的总结写成 原作者地址链接:Base64算法原理 Base64编码,是我们程序开发中经常使用到的编码方法.它是一种基于 ...

  2. base64加密原理详解及C语言源码

    base64加密原理详解 Base64从本质来说,其实并不是加密算法,只是一种编码方式而已,Base64的"加解密"也不叫加密解密,而是编码解码,但是现在一般都把它归为加密算法. ...

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

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

  4. phpjiami加密原理详解及解密

    零.引言 最近工作中遇到一些使用phpjiami进行加密的php代码,所以对这个加密进行了详细的分析. 本文包括如下内容: phpjiami的加密原理 详细的phpjiami的解密方法 略带一些Php ...

  5. WPA/WPA2安全认证加密原理详解

    1.  WPA加密版本介绍 WPA加密算法的的两个版本介绍 WPA = 802.1x + EAP + TKIP +MIC = Pre-shared Key + TKIP + MIC 802.11i(W ...

  6. RSA加密原理详解,以及RSA中的数论基础

    文章目录 1. RSA加密算法介绍 2. RSA密钥生成 3. RSA加密和解密 4. RSA的安全性 5.涉及到的数论基础 5.1. 模的逆元 5.1.1. 扩展欧几里得算法计算模逆元 5.1.2. ...

  7. (4)AES分组加密算法(原理详解)

    说明:本内容参考B站UP主"可厉害的土豆"的视频讲解,强烈推荐一下该宝藏UP主 [AES加密算法]| AES加密过程详解| 对称加密| Rijndael-128| 密码学| 信息安 ...

  8. 无线WiFi网络的密码破解攻防及原理详解

    无线WiFi网络的密码破解攻防及原理详解 大家应该都有过这样的经历,就是感觉自己家的无线网怎么感觉好像变慢了,"是不是有人蹭我家网?""还有的时候咱们出门也想试图蹭一下别 ...

  9. ***原理详解(中篇)

    本文来自网易云社区. 3. ***工作原理 终于说到***工作原理了,在说这个之前必须先介绍以下普通socks 5的工作原理,将之与***的"变异版"进行对比,就可以看出***处理 ...

最新文章

  1. java map随机取值_HashMap随机取值和迭代器取值的对比
  2. java缩放浏览器_javascript检测浏览器的缩放状态实现代码
  3. 玩转GIT系列之【如何配置GIT的用户名/密码/密钥】
  4. fillrect不填充被覆盖的区域 mfc_quot;条带覆盖quot;猜想的中二证明:quot;球面条线覆盖或点覆盖quot;积分π...
  5. 445端口 mysql_关于如何关闭window端口445的详细介绍
  6. getcwd和pwd为什么不一样_农村医保,为什么每个地区收费不一样?
  7. python修改xml标签的值_对python修改xml文件的节点值方法详解
  8. MySQL的NULL值
  9. java占32位存储空间时,java空间
  10. phpeclipse+xdebug配置
  11. 一只激光雷达独角兽的倒掉,可能进入倒计时了
  12. 《C++ Primer Plus》读书笔记之十—类和动态内存分配
  13. idea中push到github或gitee过程中的常见错误记录
  14. 【生产调度】基于matlab遗传算法求解柔性生产调度(FJSP)问题【含Matlab源码 1780期】
  15. WF不是工作流(后续)
  16. 斐讯k3更新mysql_斐讯K3官改,安装onmp教程,回馈社区。-附TCExam后续安装
  17. 常用RGB颜色表 色值
  18. 从零开始的泡泡龙游戏
  19. workgroup无法访问.您可能没有权限 完美问答解
  20. 五子棋 手打稍加改变自慕课网hyman

热门文章

  1. js轮播图的普遍问题
  2. NLP各种语言模型的优缺点比较
  3. 第六周总结CoreIDRAW
  4. Spring Cloud 系列之 Netflix Zuul 服务网关(三)
  5. 台式计算机属于什么资产设备,办公用的电脑,属于固定资产的那一类??谢谢 – 手机爱问...
  6. word里对代码的排版
  7. 关于队里面最菜的在博客打卡第四十八天这件事
  8. Unity【Multiplayer 多人在线】- Socket 通用客户端网络模块(二)、Receive 接收并处理数据
  9. 解释linux中的三种重定向,Linux重定向及反弹shell详解
  10. 利用c++STL中的map实现基本哈希族谱