亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? calculate_ji_calculate_key.cpp

?? 實現《密碼學導引》一書中DES算法差分攻擊。輸出J1-J8及密鑰Key。默認是3輪DES
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
	

                                               //計算L0'
	for(i=0;i<4;i++)
	{	
		p1=*(plaintext1+i);
		p2=*(plaintext2+i);
		for(j=7;j>=0;j--)
		{
			L0[8*i+j]=p1%2;	
		     p1=p1/2;
		    l0[8*i+j]=p2%2;	
		     p2=p2/2;
		    L [8*i+j]=L0[8*i+j]^l0[8*i+j];
		}
	}
	
	                                       //計算L3和L3*
	for(i=0;i<4;i++)
	{	
		p1=*(ciphertext1+i);
		p2=*(ciphertext2+i);
		for(j=7;j>=0;j--)
		{
			L3[8*i+j]=p1%2;	
		     p1=p1/2;
		    l3[8*i+j]=p2%2;	
		     p2=p2/2;		    
		}
	}

	
                                               //計算R3'
	for(i=4;i<8;i++)
	{	
		p1=*(ciphertext1+i);
		p2=*(ciphertext2+i);
		for(j=7;j>=0;j--)
		{
			R3[8*(i-4)+j]=p1%2;	
		     p1=p1/2;
		    r3[8*(i-4)+j]=p2%2;	
		     p2=p2/2;
		    R [8*(i-4)+j]=R3[8*(i-4)+j]^r3[8*(i-4)+j];
		}
		
	}
	

                                             //計算C'=P-1(R3'^L0')   課本中(1)
	for(i=0;i<32;i++)
		c[P[i]]=R[i]^L[i];	

	                                         
                                            //計算E(L3)和E(L3*)     課本中(2)
	for(i=0;i<48;i++)
	{
		EL[i]=L3[E[i]];
		el[i]=l3[E[i]];	
	}                	
	                                       //計算testj(Ej,Ej*,Cj')

	test(EL,el,c,J);


}


                                                                            //計算Ji外16-bit,其中des()為簡化des加密算法,key()為求16-bit子函數

void des(unsigned char *source,unsigned char * dest1,unsigned char * inkey, int flg)                                                                                          
                                                                                                                                                                                
{   

    unsigned char bufout[64],kwork[56], worka[48], kn[48], buffer[64],
		          nbrofshift, temp1, temp2;
    int valindex;
    register i, j, k, iter;                                                          

                                                                                        /* MAIN PROCESS */
                                                                                 
                                                                                       /* Convert from 64-bit data into 64-byte data */  /* buffer是明文 */
   for (i = 0; i < 8; i++) 
   {
      j = *(source + i);
	  for(k=7;k>=0;k--)
	  {	  
		  buffer[8*i+k] = j% 2;
		  j=j/2;
      
	  }
   }

                                       
                                      //此處為簡化des,無IP置換,不過為了形式統一起見,仍然賦值
	for(i=0;i<64;i++)
	   bufout[i]=buffer[i];
	
	                                   /* Convert from 64-bit key into 64-byte key */ 
/*   for (i = 0; i < 8; i++) 
   {
	  kwork[8*i] = ((j = *(inkey + i)) / 128) % 2;
      key[8*i+1] = (j / 64) % 2;
      key[8*i+2] = (j / 32) % 2;
      key[8*i+3] = (j / 16) % 2;
      key[8*i+4] = (j / 8) % 2;
      key[8*i+5] = (j / 4) % 2;
      key[8*i+6] = (j / 2) % 2;
      key[8*i+7] = j % 2;
   } */

                                                                                        /* Initial Permutation of Key */      /*  初始密鑰生成置換PC-1  */
    for(i=0;i<56;i++)  
	   kwork[i] = inkey[i];
     

                                                                                        /* 16 Iterations */
for (iter = 1; iter < Round+1; iter++) 
{
    for (i = 0; i < 32; i++)
         buffer[i] = bufout[32+i];                                                         /*  取右邊(低位)32位 r 計算f  */

     for(i=0;i<48;i++)                                                                                   /* Calculation of F(R, K) */
         worka[i] = buffer[E[i]];                                                                               /* Permute - E */          /* E置換,把r由32位擴充為48位 */
     
                                                                                        /* KS Function Begin */ /* 輪密鑰移位算法,用于生成進入PC-2的中間密鑰 */
  if (flg)
  {
      nbrofshift = shift[iter-1];
      for (i = 0; i < (int) nbrofshift; i++) 
      {
        temp1 = kwork[0];
        temp2 = kwork[28];
        for (j = 0; j < 27; j++) 
        {
         kwork[j] = kwork[j+1];
         kwork[j+28] = kwork[j+29];
        }
        kwork[27] = temp1;
        kwork[55] = temp2;
      }
  }   
  else if (iter > 1) 
  {
      nbrofshift = shift[17-iter];
      for (i = 0; i < (int) nbrofshift; i++) 
	  {
        temp1 = kwork[27];
        temp2 = kwork[55];
        for (j = 27; j > 0; j--) 
		{
          kwork[j] = kwork[j-1];
          kwork[j+28] = kwork[j+27];
		}
        kwork[0] = temp1;
        kwork[28] = temp2;
	  }
  }
  
       
    for(i=0;i<48;i++)          
		kn[i] = kwork[PC2[i]];                                                                  /* Permute kwork - PC2 */ /* 經過PC-2 生成輪密鑰 k[i] */

                                                                                        /* KS Function End */

                                                                                        /* worka XOR kn */ /* 異或運算生成Bi,準備通過s盒變換 */
    for (i = 0; i < 48; i++)   
		worka[i] = worka[i] ^ kn[i];

                                                                                        /* 8 s-functions */ /* 8個s盒函數運算 */

	for(i=0;i<32;i++)
	{
	  if(i>=0&&i<=3)
		valindex = s1[2*worka[ 0]+worka[ 5]][2*(2*(2*worka[ 1]+worka[ 2])+worka[ 3])+worka[ 4]];
	  if(i>=4&&i<=7)
		valindex = s2[2*worka[ 6]+worka[11]][2*(2*(2*worka[ 7]+worka[ 8])+worka[ 9])+worka[10]];
	  if(i>=8&&i<=11)
		valindex = s3[2*worka[12]+worka[17]][2*(2*(2*worka[13]+worka[14])+worka[15])+worka[16]];
	  if(i>=12&&i<=15)
		valindex = s4[2*worka[18]+worka[23]][2*(2*(2*worka[19]+worka[20])+worka[21])+worka[22]];
	  if(i>=16&&i<=19)
		valindex = s5[2*worka[24]+worka[29]][2*(2*(2*worka[25]+worka[26])+worka[27])+worka[28]];
	  if(i>=20&&i<=23)
		valindex = s6[2*worka[30]+worka[35]][2*(2*(2*worka[31]+worka[32])+worka[33])+worka[34]];
	  if(i>=24&&i<=27)
		valindex = s7[2*worka[36]+worka[41]][2*(2*(2*worka[37]+worka[38])+worka[39])+worka[40]];
	  if(i>=28&&i<=31)
		valindex = s8[2*worka[42]+worka[47]][2*(2*(2*worka[43]+worka[44])+worka[45])+worka[46]];

	  valindex = valindex * 4;
	  kn[i]=binary[(i%4)+valindex];   	  
	  
	}                           /* binary[i]將si[][]中元素轉化為2進制*/ 

                                                                                        /* Permute - P */ /* f函數中的P置換 */
        for(i=0;i<32;i++)
            worka[i] = kn[P[i]];
                                                                    /* worka中儲存f函數的值 */

                                                                                        /* bufout XOR worka */
  for (i = 0; i < 32; i++) 
  { 
   bufout[i+32] = bufout[i] ^ worka[i];
    bufout[i] = buffer[i];
  }
 
}                                         /* End of Iter n輪迭代結束 */

                                                                   /* Prepare Output */

                                          /*此處為簡化des,bufout左右未交換,且未對bufout進行IP逆置換,只是為了與下個程序段中參數buffer對應,
                                              才將bufout賦值給buffer*/

  for(i=0;i<64;i++) 
	   buffer[i]=bufout[i];
                                          

  j = 0;
  for (i = 0; i < 8; i++) 
  {  
	  dest1 [i] = 0x00;  
	  for (k = 0; k < 7; k++)    
		  dest1 [i] = (dest1 [i] + buffer[j+k]) * 2;  
  
	  dest1 [i] = dest1 [i] + buffer[j+7];  
	  j += 8;

  } 

}

                                                          //新加入從k3推key算法
void key(unsigned char *source,unsigned char * dest,unsigned char * inkey, int flg,unsigned char *kr)
{
	                                                    
	unsigned char k3[48],k[56],direct[8],dest1[N],kround[56],key[64];
	register i,j,p,iter,temp1,temp2;
	
                                                      //initialize k3
	for(i=0;i<8;i++)                     
	{
		p=*(kr+i);
		for(j=5;j>=0;j--)
		{
			k3[6*i+j]=p%2;
		    p=p/2;
		}
	
	}
		
	                                                    //對k3進行PC-2逆
	for(i=0;i<48;i++)             
           k[PC2[i]]=k3[i];
	                                                    
                                                        //search for the direction of the unknown 8-bit
	 p=0;
	 for(i=0;i<56;i++)
	 {
		for(j=0;j<48;j++)
		{ 
			if(PC2[j]==i) 
				break;
		}
		if(j==48)
		{
			direct[p]=i;
		    p++;
		}
	 }
	                                                     //對k[]未賦值的字節進行256次的窮盡搜索
	for(i=0;i<256;i++)	 
	{
		 j=i;
		 for(p=0;p<8;p++)
		 {
			 k[direct[p]]=j%2;
			 j=j/2;
			 
		 }
		 for(j=0;j<56;j++)		 			 
			 kround[j]=k[j];
		 	                                                   /* 3 round Iterations 求key*/
    
		 for (iter = 0; iter < Round; iter++) 
		 {
	 				 
			 for (p = 0; p < (int) shift[iter]; p++) 
			 {				     
				 temp1 = kround[27];					 
				 temp2 = kround[55];					 
				 for (j = 27; j > 0; j--)					 
				 {						 
					 kround[j] = kround[j-1];						 
					 kround[j+28] = kround[j+27];					 
				 }					 
				 kround[0]  = temp1;					 
				 kround[28] = temp2;				 
			 }			 
	
		 }
		 
                                                   //compute dest1[8] ,and will be compared with *dest
		 des(source,dest1,kround,flg);
		 
		                                           // 對dest(密文)的正確性進行判斷
		 p=0;
		 for(j=0;j<N;j++)
		 {
			 if(dest1[j]==dest[j])			 
				 p++;	
			 else
				 break;
		 }
			 
		 if(p==N)		 
			 break;

	}
	
                                              //calculate PC1逆 get 56bit value of key[64];
	for(i=0;i<56;i++)			
			key[PC1[i]]=kround[i];    
	
		                                      //calculate the other 8bit value of key[64](the checkout bit);
	for(i=0;i<8;i++)
	{
			key[8*i+7]=1;
		    for(j=0;j<7;j++)
			   key[8*i+7]=key[8*i+7]^key[8*i+j];
	}

	printf("\nThe Key is:\n");	
	for(i=0;i<64;i++)
	{
		printf("%d ",key[i]);
		if((i+1)%8==0)
			printf("    ");
	}
                                              
	                                         //calculate inkey;
	for(i=0;i<8;i++)
	{
		inkey[i]=key[8*i];
		for(j=1;j<8;j++)
		{
			inkey[i]*=2;
			inkey[i]=inkey[i]+key[8*i+j];
		}
			   
	}

}

 
void main()
{
    unsigned char plaintext1[N]={0x74,0x85,0x02,0xcd,0x38,0x45,0x10,0x97};
	unsigned char plaintext2[N]={0x38,0x74,0x75,0x64,0x38,0x45,0x10,0x97};
	unsigned char ciphertext1[N]={0x03,0xc7,0x03,0x06,0xd8,0xa0,0x9f,0x10};
	unsigned char ciphertext2[N]={0x78,0x56,0x0a,0x09,0x60,0xe6,0xd4,0xcb};

	unsigned char plaintext1b[N]={0x48,0x69,0x11,0x02,0x6a,0xcd,0xff,0x31};
	unsigned char plaintext2b[N]={0x37,0x5b,0xd3,0x1f,0x6a,0xcd,0xff,0x31};
	unsigned char ciphertext1b[N]={0x45,0xfa,0x28,0x5b,0xe5,0xad,0xc7,0x30};
	unsigned char ciphertext2b[N]={0x13,0x4f,0x79,0x15,0xac,0x25,0x34,0x57};

    unsigned char plaintext1c[N]={0x35,0x74,0x18,0xda,0x01,0x3f,0xec,0x86};
	unsigned char plaintext2c[N]={0x12,0x54,0x98,0x47,0x01,0x3f,0xec,0x86};
	unsigned char ciphertext1c[N]={0xd8,0xa3,0x1b,0x2f,0x28,0xbb,0xc5,0xcf};
	unsigned char ciphertext2c[N]={0x0f,0x31,0x7a,0xc2,0xb2,0x3c,0xb9,0x44};

	unsigned char J[8][64],kr[8],inkey[8];
	int i,j,flg=1;
	                                        
                                           //為J[8][64]賦初值0	
	for(i=0;i<8;i++)
		for(j=0;j<64;j++)
		  J[i][j]=0;
	                                                         //通過三組明密文對求得Ji
	differentialattack(plaintext1,ciphertext1,plaintext2,ciphertext2,&J[0][0]);

	differentialattack(plaintext1b,ciphertext1b,plaintext2b,ciphertext2b,&J[0][0]);

	differentialattack(plaintext1c,ciphertext1c,plaintext2c,ciphertext2c,&J[0][0]);

	for(i=0;i<8;i++)
	{
		printf("J[%d]:\n",i+1);
		for(j=0;j<64;j++)
		{
		   printf("%d ",J[i][j]);
		   if((j+1)%16==0)
			 printf("\n");
		}
	}
	printf("J[i] hex denote:\n");
	                                   //用key[8]記錄Ji的值
	for(i=0;i<8;i++)
	{
		printf("J[%d]=",i+1);
		for(j=0;j<64;j++)
			if(J[i][j]==3)
			{
				kr[i]=j;
				printf("%x ",j);
			}
	
	}
	cout<<endl;

	                                   //計算inkey的子函數
	key(plaintext1,ciphertext1,inkey,flg,kr);
	printf("\The Key's Hex Denotation is:\n");
	for(i=0;i<8;i++)
		printf("%x  ",inkey[i]);
	printf("\n");

}



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美视频一区二区三区在线观看| 日日摸夜夜添夜夜添国产精品 | 色综合天天性综合| 久久99精品久久久久婷婷| 日韩电影网1区2区| 日韩成人精品在线| 视频一区视频二区中文字幕| 亚洲成人精品影院| 亚洲h在线观看| 美女高潮久久久| 国产一区美女在线| 99视频有精品| 色综合天天综合狠狠| 在线观看av一区二区| 欧美精品在线观看一区二区| 91精品国产入口| 久久久影视传媒| 一色桃子久久精品亚洲| 一区二区三区不卡在线观看| 丝袜美腿亚洲综合| 国产成a人亚洲精| 色婷婷国产精品综合在线观看| 色婷婷国产精品综合在线观看| 欧美日本在线播放| 国产三级一区二区| 国产精品九色蝌蚪自拍| 亚洲高清中文字幕| 国产美女在线观看一区| 色婷婷精品久久二区二区蜜臀av| 欧美精品第一页| 国产网站一区二区三区| 一区二区三区国产精华| 久久99国产精品久久99果冻传媒| av亚洲精华国产精华精| 日韩一卡二卡三卡国产欧美| 中文字幕一区二区三区在线播放| 日韩在线观看一区二区| 成人国产电影网| 欧美日韩一区高清| 国产精品毛片久久久久久| 亚洲超碰精品一区二区| 成人手机电影网| 欧美一区二区三区影视| 亚洲色图一区二区三区| 国内精品第一页| 欧美人xxxx| 亚洲日本在线天堂| 国产一区二区不卡老阿姨| 欧美日韩精品一区二区天天拍小说| 精品国产乱码久久久久久闺蜜 | 久久99精品国产麻豆不卡| 日本久久电影网| 国产亚洲成aⅴ人片在线观看 | 国产91在线观看| 日韩午夜精品电影| 亚洲国产欧美一区二区三区丁香婷| 国产成人av资源| 26uuu国产日韩综合| 午夜欧美大尺度福利影院在线看| 成人av网址在线| 国产日产欧美一区| 久久国产成人午夜av影院| 欧美色倩网站大全免费| 亚洲精品免费播放| 91视频国产资源| 国产精品无圣光一区二区| 美国毛片一区二区三区| 欧美日本免费一区二区三区| 中文字幕在线一区| 不卡一区二区中文字幕| 久久精品夜色噜噜亚洲a∨| 日本不卡视频在线| 日韩免费观看高清完整版在线观看| 水野朝阳av一区二区三区| 欧美日韩高清一区二区不卡| 亚洲国产日韩一区二区| 欧美日韩精品欧美日韩精品| 亚洲综合一区二区三区| 欧美性猛片aaaaaaa做受| 亚洲成人动漫精品| 欧美精品色综合| 久久国产精品区| 国产欧美日韩麻豆91| 成人福利在线看| 亚洲男帅同性gay1069| 日本高清成人免费播放| 亚洲午夜av在线| 欧美一级在线视频| 国产一区二区三区| 亚洲国产成人在线| 一本色道久久综合精品竹菊| 一区二区三区成人在线视频| 8x8x8国产精品| 国产在线视视频有精品| 欧美高清在线视频| 一本久道中文字幕精品亚洲嫩| 亚洲激情成人在线| 欧美一级电影网站| 成人18视频日本| 一区二区三区中文字幕精品精品 | 精品捆绑美女sm三区| 国产一区二区网址| 亚洲美腿欧美偷拍| 7777精品伊人久久久大香线蕉完整版| 久久精品二区亚洲w码| 国产欧美日韩不卡免费| 在线亚洲一区二区| 国产麻豆欧美日韩一区| 亚洲老司机在线| 精品久久久久香蕉网| 91蜜桃婷婷狠狠久久综合9色| 婷婷中文字幕综合| 国产精品国产三级国产有无不卡 | 日韩中文字幕亚洲一区二区va在线| 丝袜亚洲另类欧美综合| 2017欧美狠狠色| 欧美日韩一区三区四区| 国产精品一区二区久久不卡| 一区二区三区不卡在线观看| 久久午夜老司机| 日本久久精品电影| 国产福利一区二区三区视频 | 2021国产精品久久精品| 一本一道久久a久久精品 | 中文字幕一区二区不卡| 日韩一区二区影院| 欧洲色大大久久| 成人app软件下载大全免费| 看电视剧不卡顿的网站| 一级做a爱片久久| 国产精品天干天干在线综合| 欧美精品18+| 欧洲av一区二区嗯嗯嗯啊| 风流少妇一区二区| 狠狠色丁香婷婷综合| 午夜精品aaa| 亚洲一二三专区| 夜夜嗨av一区二区三区中文字幕| 国产亚洲一二三区| 久久久久久久综合| 久久综合色8888| 日韩久久久精品| 日韩欧美国产不卡| 91精品国产麻豆| 91精品免费观看| 91.xcao| 欧美电影在哪看比较好| 欧美日韩黄色一区二区| 欧洲av在线精品| 欧美巨大另类极品videosbest| 欧美怡红院视频| 欧美在线制服丝袜| 在线不卡免费av| 日韩欧美一区二区免费| 精品久久久久香蕉网| 久久久噜噜噜久久中文字幕色伊伊 | 亚洲国产综合在线| 亚洲精品日韩专区silk| 亚洲欧美国产77777| 亚洲精品你懂的| 天天免费综合色| 久热成人在线视频| 粉嫩av一区二区三区| 99视频国产精品| 欧美午夜不卡视频| 欧美一区二区三区在| 久久影院视频免费| 中文字幕一区二区不卡| 亚洲一区视频在线| 久久国产精品99精品国产| 国产黄色精品网站| 色综合久久中文字幕综合网| 欧美亚洲愉拍一区二区| 91麻豆精品国产自产在线| 26uuuu精品一区二区| 成人欧美一区二区三区小说| 亚洲一区二区黄色| 久久国产夜色精品鲁鲁99| 成人午夜免费av| 欧美日韩亚洲国产综合| 日韩欧美一区二区不卡| 国产欧美日韩三级| 香蕉久久一区二区不卡无毒影院| 精品制服美女丁香| 91丨九色丨蝌蚪丨老版| 欧美电影一区二区| 国产精品每日更新在线播放网址| 午夜免费久久看| 国产成人精品在线看| 欧美日韩aaa| 国产精品久久777777| 久久精品国产一区二区三 | 日韩欧美中文字幕公布| 国产精品久久久久aaaa樱花| 丝袜美腿亚洲综合| 91色.com| 中文成人综合网| 看片的网站亚洲| 欧美日韩视频一区二区| 国产精品三级电影|