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

📄 线性逼近表.cpp

📁 此为密码攻击中的线性分析
💻 CPP
字号:
#include<iostream.h>
#include<stdlib.h>
#include<iomanip.h>


void main()
{
	int i,j,k,p,q,x,y,z=0,l=0,sum[16][16],flag[8];
	char f[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
	char flga[4],flgb[4];
    int a[16][4]={{0,0,0,0},{0,0,0,1},{0,0,1,0},{0,0,1,1},{0,1,0,0},{0,1,0,1},{0,1,1,0},{0,1,1,1},
	{1,0,0,0},{1,0,0,1},{1,0,1,0},{1,0,1,1},{1,1,0,0},{1,1,0,1},{1,1,1,0},{1,1,1,1}};
	int b[16][4]={{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1},{1,1,0,0},{0,1,1,0},{0,0,1,1},{1,1,0,1},
	{1,0,1,0},{0,1,0,1},{1,1,1,0},{0,1,1,1},{1,1,1,1},{1,0,1,1},{1,0,0,1},{0,0,0,0}};	
	int	c[16][4]={{1,1,1,0},{0,1,0,0},{1,1,0,1},{0,0,0,1},{0,0,1,0},{1,1,1,1},{1,0,1,1},{1,0,0,0},
	{0,0,1,1},{1,0,1,0},{0,1,1,0},{1,1,0,0},{0,1,0,1},{1,0,0,1},{0,0,0,0},{0,1,1,1}};

	for(x=0;x<16;x++)
		for(y=0;y<16;y++)
		{
			int za=x;
			int zb=y;
			int disps=1<<3;
			for(i=0;i<4;i++)                       //将a,b转换成四位二进制序列
			{
				flga[i]=(za&disps ? '1':'0');
				flgb[i]=(zb&disps ? '1':'0');
				za<<=1;
				zb<<=1;
			}
						 
              for(i=0;i<16;i++) //计算异或为零的个数。
			  {if(((flga[0]&a[0][i])^(flga[1]&a[1][i])^(flga[2]&a[2][i])
					^(flga[3]&a[3][i])^(flgb[0]&c[0][i])^(flgb[x]&c[1][i])
					^(flgb[2]&c[2][i])^(flgb[3]&c[3][i]))==0)
					l++;}
			
			sum[x][y]=l;
			l=0;
		}
	    
	    cout<<"        *                  b                  "<<endl;
		cout<<"        * * * * * * * * * * * * * * * * * * * * * * * * * * "<<"\n";
		cout<<"    a   * "<<setw(3);
		for(i=0;i<16;i++)
			cout<<f[i]<<setw(3);
		cout<<"\n"<<"* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"<<"\n";
		for(i=0;i<16;i++)
		{
			cout<<"    "<<f[i]<<"   * "<<setw(3);
			for(j=0;j<16;j++)
			{
				cout<<sum[i][j]<<setw(3);
			}
			cout<<endl;
		}
}
  

⌨️ 快捷键说明

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