加密算法解析五:AES

概要

AES全称Advanced Encryption Standard,即高级加密标准,用于取代DES和3DES。该算法是由Rijndael算法在15个算法中选出来称为AES算法的,因此AES算法也称Rijndael算法。当然AES算法并不等于AES算法。Rijndael算法的分组长度和密钥长度为32位的任意倍,最小128,最大256。而AES算法分组长度只能为128,密钥只能为128、192和256,分别称为AES-128、AES-192、AES-256。

步骤

该算法步骤为:字节替换(SubBytes)、行移位(Shiftrows)、列混合(Mixcolumns)、轮密钥加(AddRoundKey)、输出。

1、字节替换:AES和DES不一样,替换位置不是按位(bit)置换,而是按字节(8bit)置换,它会将128bit的原文分成16个组(字节),再用4*4的二维数组(从上往下,从左往右排列)存储这些字节,为比如原文F61446C1A68CEA53824826A7A47F1914分组之后变成如下二维数组:

变成二维数组后,还需要根据一个字节替换表(S-Box)将二维数组里的字节替换成别的字节。例如第二个值14,会用S-Box表里横标(x)为1,列标(y)为4的元素FA替换掉F6。部分S-Box表如下:

2、行位移:4*4的数组第1行不变,第2行左移1个字节,第3行左移2个字节,第4行左移3个字节。具体示例如下:

以最后一个元素为例查看,具体移动位置如下:

  1. 列混合:以列为单位,把每列看成一个四项多项式,乘以一个固定多项式({03}+{01}+{01}X+{02}),再模(+1)。具体公式运算如下:

4、轮密钥加:二维数组中的元素与轮密钥通过异或运算相加。其中轮密钥由用户输入的密钥通过密钥扩展生成的,密钥拓展就是对用户输入的128/192/256bit密钥进行处理生成(Nb(Nr+1))双字(32bit)即44/52/60双字的扩展密钥。

5、输出:以上是循环一轮的步骤,AES128/192/256算法分别要循环10/12/14轮, 最后的原文变化后的数组就是密文,即密文与原文等长。当然,若原文是填充而来的,则密文与初始原文的长度是不一样的。

优缺点

优点:速度快,比DES还快,安全性高,目前基本没漏洞,密钥128位到256位,穷举法几乎也不可能。

缺点:加密解密的密钥相同,一旦一方密钥泄漏,安全性将不存在

使用场景

适合较大数据,需要密文恢复的场景,当然,现在的实际场景一般都是AES算法配合其他加密算法一起使用。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时间在手上,需要抓住

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值