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;
}
编译结果如下:



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

相关文章推荐

有限域GF(2^8)的四则运算及拉格朗日插值

域的性质:         群和域在数学上的概念就不解释,可以参考维基百科。当然也可以参考《密码编码学与网络安全》这书的有限域一章。形象地说,域有这样一个性质:在加法和乘法上具有封闭性。也就是说对域...

AES加密算法的详细介绍与实现

AES简介高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

AES加密算法之行移位变换

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

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

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

AES加密算法之字节替换操作

字节替换的基本原理:     使用一个表(被称为S盒)对分组进行逐一字节替换。S盒是AES算法定义的矩阵,把State中每个字节的高4位作为行值,低4位作为列值,然后取出S一盒中对应行列的元素作为输...

Java Base64、AES、SHA1、MD5加密算法

待完成。。。
  • FX_SKY
  • FX_SKY
  • 2013-07-05 12:35
  • 1645

AES加密算法原理及JAVA示例

随着对称密码的发展,DES数据加密标准算法由于密钥长度较小(56位),已经不适应当今分布式开放网络对数据加密安全性的要求,因此1997年NIST公开征集新的数据加密标准,即AES[1]。经过三轮的筛选...

AES加密算法入门

AES是一个对称密码算法。 AES支持五中模式:ECB,CBC,CFB,OFB,PCBC;支持三种填充:NoPadding,PKCS5Padding,ISO10126Padding。

AES加密算法

原理:(节选http://news.csdn.net/n/20070425/103328.html) AES 2000年10月,NIST(美国国家标准和技术协会)宣布通过从15种侯选算法中选出的一...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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