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算法列混合步骤,C语言实现

  • 2012年06月09日 10:12
  • 2KB
  • 下载

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

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

混淆矩阵(Confusion Matrix)分析

在机器学习领域,混淆矩阵(confusion matrix),又称为可能性表格或是错误矩阵。它是一种特定的矩阵用来呈现算法性能的可视化效果,通常是监督学习(非监督学习,通常用匹配矩阵:matching...
  • vesper305
  • vesper305
  • 2015年04月07日 22:43
  • 36144

AES加密算法之列混合变换

在AES算法中,需要模多项式m(x)=x^8+x^4+x^3+x+1。列混合即是用一个常矩阵乘以第二步变换后的矩阵,以达到矩阵中每一个元素都是该元素原所在列所有元素的加权和。 附上自己敲的C语言源...
  • u012620515
  • u012620515
  • 2015年11月17日 22:22
  • 4287

c#DataGridView数据绑定示例 多列混合排序

  • 2014年07月26日 11:36
  • 41KB
  • 下载

RSA与AES混合加密算法的实现

RSA与AES加密算法所产生的密钥数不一样,它们是如何进行加密的呢? 接收方生成RSA密钥对,将其中的RSA公钥传递给发送方(接收方与发送方建立连接是需要认证的,SSL/TLS协议可以确保RSA公钥的...
  • acmjk
  • acmjk
  • 2014年05月07日 16:57
  • 3423

AES加密算法之行移位变换

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

Exadata混合列压缩如何处理INSERT和UPDATE

Exadata混合列压缩如何处理INSERT和UPDATE 2011/09/12 BY MACLEAN LIU 暂无评论 Hybrid Columnar Compression混合...
  • xuzhenxiang
  • xuzhenxiang
  • 2014年03月04日 10:44
  • 893

各种算法的集合

AES算法 美国国家标准和技术研究所(NIST)经过三轮候选算法筛选,从众多的分组密码中选中Rijndael算法作为高级加密标准(AES)。Rijndael密码是一个迭代型分组密码,分组长度和密码长度...
  • tianshideyouhuo1
  • tianshideyouhuo1
  • 2017年09月21日 10:08
  • 127

典型的网络接口安全机制,AES和RSA混合加密

在服务器与终端设备进行HTTP通讯时,常常会被网络抓包、反编译(Android APK反编译工具)等技术得到HTTP通讯接口地址和参数。为了确保信息的安全,我们采用AES+RSA组合的方式进行接口参数...
  • mengfanzhong
  • mengfanzhong
  • 2017年02月10日 09:50
  • 1258
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:AES加密算法之列混合变换
举报原因:
原因补充:

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