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同状态矩阵中的数据进行逐位异或操作

  • 相关阅读:
    Python--day27--几个内置方法:__repr__()/__str__()/__del__()/__call__()/__getitem__/__setitem/delitem/__new__/__eq__/__hash__
    常见的图片格式的区别
    前端基础-CSS
    前端基础-HTML
    Python函数相关
    Python文件操作
    Python基础数据类型以及对应方法
    Python基础知识
    拿到别人的Django程序如何在本地RUN起来
    Pycharm使用秘籍
  • 原文地址:https://www.cnblogs.com/levelstrcpy/p/9944117.html
Copyright © 2011-2022 走看看