⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s-box.h

📁 AES128bit加密算法。在PDF文档中有详细算法描述。程序打印出的内容为验证结果。对应文档中的33-34页最左侧的结果。不清楚的朋友可以给我发EMAIL.
💻 H
字号:
char WeightB[256];
unsigned char NB256[256];
unsigned char S_Box[256];
unsigned char S_BoxN[256];

//造8比特01表

void Weight01()
{
	int i,j;
	memset(WeightB,0,256);
	for(i=0;i<256;i++)
			for(j=0;j<8;j++) WeightB[i]^=i>>j&1;
}

//多项式乘法 (a*b)mod m

inline unsigned char Multi_poly(unsigned char a,unsigned char b)
{
	unsigned short c=0;
	char i;
	for(i=0;i<8;i++)
		if(b>>i&1) c^=a<<i;
	for(i=15;i>7;i--)
		if(c>>i&1) c^=0x11b<<(i-8);
	return((unsigned char) c);
}


//仿射变换

unsigned char FS_function(unsigned char a)
{
	//unsigned char fsb[8]={0x52,0x29,0x94,0x4a,0x25,0x92,0x45,0xa4},tmp=0,i;
	unsigned char fsb[8]={0xf8,0x7c,0x3e,0x1f,0x8f,0xc7,0xe3,0xf1},tmp=0,i;
	//unsigned char fsb[8]={0x8f,0xc7,0xe3,0xf1,0xf8,0x7c,0x3e,0x1f},tmp=0,i;
	for(i=0;i<8;i++)
		tmp|=WeightB[a&fsb[i]]<<(7-i);
	tmp^=0x63;
	return(tmp);
}

//求逆表

void QNB()
{
	int i,j;
	memset(NB256,0,sizeof(NB256));
	for(i=0;i<256;i++)
		for(j=i;j<256;j++) 
			if(Multi_poly(i,j)==1) {NB256[i]=j;NB256[j]=i;}
}

//求S-盒

void QiuS_box()
{
	
	Weight01();
	QNB();
	unsigned char tmpch;
	
	for(int i=0;i<256;i++) 
	{
		tmpch=FS_function(NB256[i]);
		S_Box[i]=tmpch;
		S_BoxN[tmpch]=i;
			
		//printf("%02x ",S_Box[i]);
		//if(i%16==15) printf("\n");
	}
	
	//printf("\n\n");
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -