0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

AES加密算法的详细介绍与实现

算法与数据结构 来源:互联网 作者:丁德辉 2017-10-26 14:40 次阅读

我们是有追求的程序员,不能知其然不知其所以然。这一次,我来给大家讲一讲AES算法底层原理

上一期我们已经对AES的总体加密流程进行了介绍,在这里我们重新梳理一下:

1.把明文按照128bit拆分成若干个明文块。

2.按照选择的填充方式来填充最后一个明文块。

3.每一个明文块利用AES加密器和密钥,加密成密文块。

4.拼接所有的密文块,成为最终的密文结果。

具体分成多少轮呢?

初始轮(Initial Round) 1次

普通轮Rounds) N次

最终轮(FinalRound)1次

上一期我们提到,AES的Key支持三种长度:AES128,AES192,AES256。Key的长度决定了AES加密的轮数。

除去初始轮,各种Key长度对应的轮数如下:

AES128:10轮

AES192:12轮

AES256:14轮

不同阶段的Round有不同的处理步骤。

初始轮只有一个步骤:

加轮密钥(AddRoundKey)

普通轮有四个步骤:

字节代替(SubBytes)

行移位(ShiftRows

列混淆(MixColumns

加轮密钥(AddRoundKey)

最终轮有三个步骤:

字节代替(SubBytes)

行移位(ShiftRows

加轮密钥(AddRoundKey)

1.字节替代(SubBytes)

首先需要说明的是,16字节的明文块在每一个处理步骤中都被排列成4X4的二维数组。

所谓字节替代,就是把明文块的每一个字节都替代成另外一个字节。替代的依据是什么呢?依据一个被称为S盒(Subtitution Box)的16X16大小的二维常量数组。

假设明文块当中a[2,2] = 5B(一个字节是两位16进制),那么输出值b[2,2] = S[5][11]。

2.行移位(ShiftRows)

这一步很简单,就像图中所描述的:

第一行不变

第二行循环左移1个字节

第三行循环左移2个字节

第四行循环左移3个字节

3.列混淆(MixColumns)

这一步,输入数组的每一列要和一个名为修补矩阵(fixed matrix)的二维常量数组做矩阵相乘,得到对应的输出列。

4.加轮密钥(AddRoundKey)

这一步是唯一利用到密钥的一步,128bit的密钥也同样被排列成4X4的矩阵。

让输入数组的每一个字节a[i,j]与密钥对应位置的字节k[i,j]异或一次,就生成了输出值b[i,j]。

需要补充一点,加密的每一轮所用到的密钥并不是相同的。这里涉及到一个概念:扩展密钥(KeyExpansions)。

扩展密钥(KeyExpansions

AES源代码中用长度 4 * 4 *(10+1) 字节的数组W来存储所有轮的密钥。W{0-15}的值等同于原始密钥的值,用于为初始轮做处理。

后续每一个元素W[i]都是由W[i-4]和W[i-1]计算而来,直到数组W的所有元素都赋值完成。

W数组当中,W{0-15}用于初始轮的处理,W{16-31}用于第1轮的处理,W{32-47}用于第2轮的处理 ......一直到W{160-175}用于最终轮(第10轮)的处理。

1.ECB模式

ECB模式(ElectronicCodebookBook)是最简单的工作模式,在该模式下,每一个明文块的加密都是完全独立,互不干涉的。

这样的好处是什么呢?

1.简单

2.有利于并行计算

缺点同样也很明显:

相同的明文块经过加密会变成相同的密文块,因此安全性较差。

2.CBC模式

CBC模式(Cipher Block Chaining)引入了一个新的概念:初始向量IV(Initialization Vector)。

IV是做什么用的呢?它的作用和MD5的“加盐”有些类似,目的是防止同样的明文块始终加密成同样的密文块。

从图中可以看出,CBC模式在每一个明文块加密前会让明文块和一个值先做异或操作。IV作为初始化变量,参与第一个明文块的异或,后续的每一个明文块和它前一个明文块所加密出的密文块相异或。

这样以来,相同的明文块加密出的密文块显然是不一样的。

CBC模式的好处是什么呢?

安全性更高

坏处也很明显:

1.无法并行计算,性能上不如ECB

2.引入初始化向量IV,增加复杂度。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

原文标题:漫画:AES算法的底层原理

文章出处:【微信号:TheAlgorithm,微信公众号:算法与数据结构】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    关于几种常用加密算法比较

    AES加密算法是密码学中的高级加密标准,该加密算法采用对称分组密码体制,密钥长度的最少支持为128、192、256,分组长度128位,算法
    的头像 发表于 03-19 09:21 5887次阅读
    关于几种常用<b class='flag-5'>加密算法</b>比较

    汽车遥控加密算法

    本人在公司主要做国内整车厂的遥控器,主要是用keeloq,Hitag2 ,Hitag3 ,AES加密算法,想请教下论坛里的大牛,像奥迪,奔驰,宝马等豪车的遥控器用什么加密算法?
    发表于 02-17 21:04

    加密算法(DES,AES,RSA,MD5,SHA1,Base64)

    加密算法(DES,AES,RSA,MD5,SHA1,Base64)比较和项目应用加密威廉希尔官方网站 通常分为两大类:"对称式"和"非对称式"。对称性加密算法:对称式
    发表于 07-19 08:44

    最强加密算法AES加密算法的Matlab和Verilog实现 精选资料推荐

    目录背景AES加密的几种模式基本运算AES加密原理Matlab实现Verilog实现Testbe
    发表于 07-28 07:34

    XXTEA加密算法的KEIL C实现

    本内容提供了XXTEA加密算法的KEIL C实现详细列出了程序共大家学习
    发表于 08-25 17:57 3314次阅读

    基于AES和ECC的混合加密系统的设计

    基于AES加密算法具有速度快、强度高、便于实现等优点和ECC加密算法具有密钥分配与管理简单、安全强度高等优点,采用AES
    发表于 03-20 10:24 42次下载
    基于<b class='flag-5'>AES</b>和ECC的混合<b class='flag-5'>加密</b>系统的设计

    基于AES算法加密模块设计

    文中介绍了高级加密算法AES)的基本原理,并给出了基于AES算法硬件加密模块设计方案。通过Mo
    发表于 02-21 15:52 0次下载
    基于<b class='flag-5'>AES</b><b class='flag-5'>算法</b>的<b class='flag-5'>加密</b>模块设计

    基于AES加密算法的S盒优化设计_胡春燕

    基于AES加密算法的S盒优化设计_胡春燕
    发表于 03-19 11:31 2次下载

    AES加密算法说明

    1 引 言 AES加密算法的一种优化的FPGA实现方法 随着密码分析水平,芯片处理能力和计算威廉希尔官方网站 的不断进步,des的安全强度已经难以适应新的安全需要,其实现速度、代码大小和跨平台性均难
    发表于 11-30 01:31 2176次阅读

    用matlab实现AES加密算法

    AES加密算法是密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美
    发表于 05-25 15:18 11次下载
    用matlab<b class='flag-5'>实现</b><b class='flag-5'>AES</b><b class='flag-5'>加密算法</b>

    最新的十六进制AES加密算法验证工具应用程序免费下载

    本文档的主要内容详细介绍的是最新的十六进制AES加密算法验证工具应用程序免费下载。
    发表于 04-24 08:00 20次下载
    最新的十六进制<b class='flag-5'>AES</b><b class='flag-5'>加密算法</b>验证工具应用程序免费下载

    如何实现AES加密算法IP核的设计与验证

    提高吞吐率,有的着力于低成本和低功耗的实现。本文针对手持设备和移动终端场合下的应用需求设计出一款完全遵循标准的AES加密算法IP核,在面积与性能之间取得良好折中。为了减小硬件的面积,本文提出一种等价
    发表于 04-20 17:59 10次下载
    如何<b class='flag-5'>实现</b><b class='flag-5'>AES</b><b class='flag-5'>加密算法</b>IP核的设计与验证

    举例几种常见的加密算法

    今天主要总结下常用的对称性加密算法DES和AES,非对称性加密算法RSA。 01  DES加密算法 1.DES含义 DES全称为Data Encrypt
    的头像 发表于 04-28 13:52 2w次阅读
    举例几种常见的<b class='flag-5'>加密算法</b>

    Go常用的加密算法详细解读

    【导读】本文介绍了常用的加密算法,并对这些加密算法结合实际 golang 代码段进行了详细解读。 前言 加密解密在实际开发中应用比较广泛,常
    的头像 发表于 09-01 14:47 2985次阅读

    常见的加密算法有哪些?它们各自的优势是什么?

    常见的加密算法及其优势如下: AES(Advanced Encryption Standard): AES是一种对称加密算法,采用分组密码体制,支持128位、192位和256位密钥长度
    的头像 发表于 12-17 15:57 80次阅读