AES加密算法之列混合变换

原创 2015年11月17日 22:22:53

在AES算法中,需要模多项式m(x)=x^8+x^4+x^3+x+1。列混合即是用一个常矩阵乘以第二步变换后的矩阵,以达到矩阵中每一个元素都是该元素原所在列所有元素的加权和。


例题:



附上自己敲的C语言源码:

#include <iostream>
using namespace std;

void PrintfMatrix(unsigned char m[4][4])
{
	for(int i=0;i<4;i++)
	{
		for(int j=0;j<4;j++)
		{
		printf("%4x",m[i][j]);
		if(j%4==3)
			puts("");
		}
		
	}
}
unsigned char xtime(unsigned char st)
{
	return (st<<1)^((st&0x80)?0x1b:0x00);     //x乘法   二进制串左移一位,判断最高位是否溢出,溢出要异或0x1b
}
void mixcolumns(unsigned char state[4][4],unsigned char cipher[4][4])
{
	for(int j=0;j<4;j++)
	{
		for(int i=0;i<4;i++)
		{
			cipher[i][j]=xtime(state[i%4][j])      //0x02乘法
				         ^(state[(i+1)%4][j])^xtime(state[(i+1)%4][j])//0x03乘法
					  ^state[(i+2)%4][j]      //0x01乘法
                                          // ^state[(i+2)%4][j];     //0x01乘法   这句写错了,so结果不对,应该是i+3
					   ^state[(i+3)%4][j];     //0x01乘法
		}
	}
}
int main()
{
	unsigned char state[4][4]={
		/*0,4,8,12,
		   1,5,9,13,
		   2,6,10,14,
		   3,7,11,15,*/
		0x87,0xF2,0x4D,0x97,
		   0x6E,0x4C,0x90,0xEC,
		    0x46,0xE7,0x4A,0xC3,
		    0xA6,0x8C,0xD8,0x95,
	};
	unsigned char cipher[4][4]; 
	printf("明文为:\n");PrintfMatrix(state);
	mixcolumns(state,cipher);
	printf("列混合结果:\n");PrintfMatrix(cipher);
	return 0;
}
编译结果如下:



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

AES加密算法之行移位变换

行移位变换完成基于行的循环移位操作,变换方法为:第0行不变,第1行循环左移1个字节,第2行循环左移两个字节,第3行循环左移3个字节。如下图所示。 附上自己敲的C语言源码: #include us...

AES算法之理论与编程结合篇

AES算法之理论与编程结合篇 作者:hecl 看雪ID:chence 时间:05/29/2014     目录 1 前言 1 2 AES的数学理论基础 1 3 AES算法 3 3....

AES加解密算法详解

0 AES简介   美国国家标准技术研究所在2001年发布了高级加密标准(AES)。AES是一个对称分组密码算法,旨在取代DES成为广泛使用的标准。   根据使用的密码长度,AES最常见的...

二十款漂亮的CSS字体样式,让你受用非浅

二十款漂亮的CSS字体样式,让你受用非浅  平时对于网站整站的字体风格常常很纠结,纠结到底用什么样式才行,才好看,后来在网上搜集收到二十种我认为很漂亮的字体样式并使用,感觉很美观,解决了我以...

AES加密解密算法的C代码实现

AES 加密解密的原理我就不说了, 弟兄们自己上百度去查, 文章很多。 我这里只列出从网上获取的代码的实现, 我修改了一些, 可以很方便的使用到你的代码里面。 AES 比DES算法的强度更强。AES使...

AES加密中列混合的具体算法

AES明文在加密过程中涉及到字节代换、行移位、列混合、轮密钥加等过程。这里对列混合的算法做出一些浅显的解释。 列混合其实就是对一个状态的每一列去乘一个矩阵,其中乘法是在有限域GF(2^8)内进行的,...

AES加密算法

  • 2015年12月06日 08:53
  • 1.91MB
  • 下载

AES通用加密算法(C#)

  • 2017年08月23日 16:11
  • 70KB
  • 下载

java Aes256 加密算法的实现

如果希望进行AES256位的加密解密,需要事先从java官网下载 local_policy.jar与US_export_policy.jar替换%JAVA_HOME%/jre/lib/security...

aes加密算法详解

  • 2015年03月19日 17:57
  • 243KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:AES加密算法之列混合变换
举报原因:
原因补充:

(最多只允许输入30个字)