zoukankan      html  css  js  c++  java
  • AES加密算法详解

    AES 是一个对称密码分组算法,分组长度为128bit,密钥长度为128、192 和 256 bit。

    整个加密过程如下图所示。

    1.密钥生成算法

     密钥扩展过程:

        1)  将种子密钥按下图所示的格式排列,然后每32bit分别记为w[0]、w[1]、w[2]、w[3];

        2)依次取问w[5],w[6].......w[43],记为w[j]

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

      函数g的流程说明:

        a)  将w循环左移8比特;

        b)  分别对每个字节做S盒置换;

        c)  与32比特的常量(RC[j/4],0,0,0)进行异或,RC是一个一维数组,RC = {0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1B}

    2.字节替代(SubBytes)

    将状态矩阵中的元素通过S盒映射为一个新的字节:把该字节的高4位作为行值,低4位作为列值,取出S盒对应的元素作为输出。

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

    S盒内部计算方法:

    y=Ax-1+b

    其中x*x-1=1mod(x8+x4+x3+x2+1),则x为输入元素,y为S盒输出元素。

    3.行移位(ShiftRows)

    将状态矩阵的第0行左移0字节,第1行左移1字节,第2行左移2字节,第3行左移3字节

    4.列混合(MixColumns)

    将每列的元素乘以一个行列式进行替换。

    5.轮密钥加(AddRoundKey)

     

    轮密钥加是将128位轮密钥Ki同状态矩阵中的数据进行逐位异或操作

  • 相关阅读:
    Java 流(Stream)、文件(File)和IO
    Java集合笔记
    希尔排序
    多线程
    查找算法
    快速排序
    leetcode题解58
    9.回文数
    SonarQube代码质量管理平台安装及使用
    用GitBlit 和 VS GitSourceControlProvider 搭建基于 Http(s) 的 Git 工作平台
  • 原文地址:https://www.cnblogs.com/levelstrcpy/p/9944117.html
Copyright © 2011-2022 走看看