首页 > 编程语言 >AES算法

AES算法

时间:2023-04-09 18:35:09浏览次数:37  
标签:AES word temp 16 int ++ 算法 static

 

(一)设计思路(可包含部分关键代码说明)

  /*通过密钥计算规则计算余下数组

         *

         *1.如果i不是4的倍数,那么第i列由如下等式确定:

         *W[i]=W[i-4]⨁W[i-1]

         *2.如果i是4的倍数,那么第i列由如下等式确定:

         *W[i]=W[i-4]⨁T(W[i-1])

         *其中,T是一个有点复杂的函数。函数T由3部分组成:字循环(每次循环一位)、字节代换(s盒)和轮常量异或。

         */

 

        for (i = 4; i < 44; i++) {

            temp = word[i - 1];//看作W[i-1]

            if (i % 4 == 0) { //i为4的倍数 进入函数运算 W[i-1]=T(W[i-1])

                temp = subWord(rotWord(temp));

                temp[0] = temp[0] ^ RCon[i / 4 - 1];

            }

            for (j = 0; j < 4; j++) {

                word[i][j] = word[i - 4][j] ^ temp[j];//相当于W[i]=W[i-4]⨁W[i-1]

            }

        }

 

}

 //密钥扩展中的移位

    static int[] rotWord(int[] word) {

        int[] rot = new int[4];

        int i;

        for (i = 0; i < 4; i++) {

            rot[i] = word[(i + 1) % 4];

        }

        return rot;

    }

 

    //密钥扩展中的4个字节的代换(4个字节为一组) 例如 A2 BE C4 D5

    static int[] subWord(int[] word) {

        int sub[] = new int[4];

        int i;

        for (i = 0; i < 4; i++) {

            sub[i] = subByte(word[i]);

        }

        return sub;

    }

 

    //S盒的单个字节代换 例如 AE

    static int subByte(int w) {

        int x = w / 16;

        int y = w % 16;

        return sbox[x * 16 + y];

    }

 

    //轮密钥加

    static int[] addRoundKey(int[] text, int round) {

        int[] add = new int[16];

        int i, j;

        for (i = 0; i < 4; i++) {

            for (j = 0; j < 4; j++) {

                //System.out.print(Integer.toHexString(word[4 * round + i][j]) + ",");//第round轮的轮密钥

                add[4 * i + j] = text[4 * i + j] ^ word[4 * round + i][j]; //逐比特异或

            }

 

 

        }

        return add;

    }

 

    //行移位(循环移位)规则:第0行移0位  .....  第3行移3位

    static int[] shiftRows(int[] text) {

        int[] shift = new int[16];

        int i, j;

        for (i = 0; i < 4; i++) {

            for (j = 0; j < 4; j++) {

                shift[4 * i + j] = text[4 * ((i + j) % 4) + j];

            }

        }

        return shift;

    }

 

    //列混合

    static int[] mixColumn(int[] text) {

        int[] mix = new int[16];

        int[] mass = {2, 3, 1, 1};

        int i, j, u;

        for (i = 0; i < 16; i++) {

            u = 0;

            for (j = 0; j < 4; j++) {

                u = u ^ fieldMulit(text[(i / 4) * 4 + j], mass[(4 - i % 4 + j) % 4]);

            }

            mix[i] = u;

        }

        return mix;

    }

标签:AES,word,temp,16,int,++,算法,static
From: https://www.cnblogs.com/guwanghui/p/17300743.html

相关文章

  • 几种常用的Java 算法
    packagejsh.mg.msg.service.msg.test;importjava.util.Arrays;importstaticjava.util.Arrays.binarySearch;/****几种常用的Java算法*/publicclassTestClass{/****二分查找算法*/publicstaticintbinarySearch(int[]arr,inttarge......
  • 推荐算法在商城系统实践
    一、简介本文博主给大家讲解如何在自己开源的电商项目newbee-mall-pro中应用协同过滤算法来达到给用户更好的购物体验效果。newbee-mall-pro项目地址:源码地址:https://github.com/wayn111/newbee-mall-pro在线地址:http://121.4.124.33/newbeemall二、协同过滤算法协同过......
  • 算法思想
    \(\mathcal{Part}\)1.前提提要注意:本文为提高组难度的算法思想,主要为前缀和,差分等优化因为是思想,讲的会比较玄乎,能理解就好\(\mathcal{Part}\)2.双指针双指针通常解决区间问题步骤是,确定一个右节点或左节点作为一个参考点,通常取右节点,记为\(j\)我们考虑一个刚好符合题......
  • 人工智能概率算法-模拟神经元结构预测价格
    最近研究人工智能概率算法,想通过统计学的方式预测未来比较好的例子就是股票,历史数据很丰富输入端:4个参数(开盘价、最高价、最低价、收盘价)输出端:4个参数第二天(开盘价、最高价、最低价、收盘价)把价格从-10到+10,每次迭代0.1,分类成200个特征刚开始神经元的输入端不敏感,细胞核不......
  • 算法基础
    语言基础取地址符我们可以用&读取变量的地址。特别的,对于数组,使用"数组名+元素"可以获得该变量的地址。例如\(f+1\)就是\(f\)数组第\(1\)个元素的地址。在C/C++中,指针变量的类型为类型名后加上一个*,例如int类型的指针为int*。要想访问指针变量地址所对应的......
  • CSCI561 算法解析
    CSCI561CSCI561FirstOrderLogicResolutioGuidelinesThisisaprogrammingassignment.Youwillbeprovidedwithsampleinputsandoutputs(seebelow).Pleaseunderstandthatthegoalofthesamplesistocheckthatyoucancorrectlyparsetheproblemdefi......
  • 数组的算法
    数值型数组特征值统计这里特征值涉及到:平均值,最大值,最小值,总和等求最大值:将数组第一个元素假设为最大值intmax=arr[0];再然后用写一个判断语句如果数组第一个元素小于当前比较的元素就把当前比较的元素赋值给maxif(max<arr[i]){max=arr[i]}求最小值:定义一个变量这个数大......
  • 【算法题】831. 隐藏个人信息
    题目:给你一条个人信息字符串s,可能表示一个邮箱地址,也可能表示一串电话号码。返回按如下规则隐藏个人信息后的结果:电子邮件地址:一个电子邮件地址由以下部分组成:一个名字,由大小写英文字母组成,后面跟着一个‘@’字符,后面跟着一个域名,由大小写英文字母和一个位于中间的......
  • Lasso回归_ElasticNet回归_PolynomialFeatures算法介绍---人工智能工作笔记0032
    然后我们再来看这个ridge回归,可以看到这里的这个岭回归,可以看到他的损失函数,其实就是添加了一个使用L2的正则化的,惩罚项对吧,目的是为了增强,损失函数的泛化能力,这里的alpha,实际上作用是为了,调整,这个损失函数的,正确率多一点还是泛化能力强一点. 可以看到他的使用函数的方......
  • java-信息安全(二十)国密算法 SM1,SM2,SM3,SM4
    一、概述国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。目前主要使用公开的SM2、SM3、SM4三类算法,分别是非对称算法、哈希算法和对称算法。SM1 为对称加密。其加密强度与AES相当。该算法不公开,调用该算法时,需要通过加密芯片的接口进......