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

📄 serpent.cpp

📁 本人本科的毕业设计。基于Serpent密码的回退N协议的数据传输。希望可供大家参考。谢谢诶!
💻 CPP
📖 第 1 页 / 共 2 页
字号:
   keying(x0, x1, x2, x3, subkeys[18]);
   RND18(x0, x1, x2, x3, y0, y1, y2, y3);
   transform(y0, y1, y2, y3, x0, x1, x2, x3);
   keying(x0, x1, x2, x3, subkeys[19]);
   RND19(x0, x1, x2, x3, y0, y1, y2, y3);
   transform(y0, y1, y2, y3, x0, x1, x2, x3);
   keying(x0, x1, x2, x3, subkeys[20]);
   RND20(x0, x1, x2, x3, y0, y1, y2, y3);
   transform(y0, y1, y2, y3, x0, x1, x2, x3);
   keying(x0, x1, x2, x3, subkeys[21]);
   RND21(x0, x1, x2, x3, y0, y1, y2, y3);
   transform(y0, y1, y2, y3, x0, x1, x2, x3);
   keying(x0, x1, x2, x3, subkeys[22]);
   RND22(x0, x1, x2, x3, y0, y1, y2, y3);
   transform(y0, y1, y2, y3, x0, x1, x2, x3);
   keying(x0, x1, x2, x3, subkeys[23]);
   RND23(x0, x1, x2, x3, y0, y1, y2, y3);
   transform(y0, y1, y2, y3, x0, x1, x2, x3);
   keying(x0, x1, x2, x3, subkeys[24]);
   RND24(x0, x1, x2, x3, y0, y1, y2, y3);
   transform(y0, y1, y2, y3, x0, x1, x2, x3);
   keying(x0, x1, x2, x3, subkeys[25]);
   RND25(x0, x1, x2, x3, y0, y1, y2, y3);
   transform(y0, y1, y2, y3, x0, x1, x2, x3);
   keying(x0, x1, x2, x3, subkeys[26]);
   RND26(x0, x1, x2, x3, y0, y1, y2, y3);
   transform(y0, y1, y2, y3, x0, x1, x2, x3);
   keying(x0, x1, x2, x3, subkeys[27]);
   RND27(x0, x1, x2, x3, y0, y1, y2, y3);
   transform(y0, y1, y2, y3, x0, x1, x2, x3);
   keying(x0, x1, x2, x3, subkeys[28]);
   RND28(x0, x1, x2, x3, y0, y1, y2, y3);
   transform(y0, y1, y2, y3, x0, x1, x2, x3);
   keying(x0, x1, x2, x3, subkeys[29]);
   RND29(x0, x1, x2, x3, y0, y1, y2, y3);
   transform(y0, y1, y2, y3, x0, x1, x2, x3);
   keying(x0, x1, x2, x3, subkeys[30]);
   RND30(x0, x1, x2, x3, y0, y1, y2, y3);
   transform(y0, y1, y2, y3, x0, x1, x2, x3);
   keying(x0, x1, x2, x3, subkeys[31]);
   RND31(x0, x1, x2, x3, y0, y1, y2, y3);
   x0 = y0; x1 = y1; x2 = y2; x3 = y3;
   keying(x0, x1, x2, x3, subkeys[32]);

   /* The ciphertext is now in x */
   cipher[0] = x0;
   cipher[1] = x1;
   cipher[2] = x2;
   cipher[3] = x3;	
 }


void Serpent::Decrypt(CString strin, CString &strout) 
{
	// TODO: Add your control notification handler code here
    int output[16]={0};
    CString strid;
	ULONG ciphertext[4],plaintext[4];
    round=strin.GetLength()/32;
 //     char *plaint;
//      plaint=new char[16];
	for(int j=0;j<round;j++)
	{	
//	  CString str=strin.Left(32);
 //     plaint=(LPTSTR)(LPCTSTR)str;  
	  
 //     ciphertext[j]=(plaint[4*j+0]<<24)|(plaint[4*j+1]<<16)|(plaint[4*j+2]<<8)|plaint[4*j+3];
		ciphertext[0] = strtoul(strin.Left(8),NULL,16);
		strin = strin.Mid(8);
		ciphertext[1] = strtoul(strin.Left(8),NULL,16);
		strin = strin.Mid(8);
		ciphertext[2] = strtoul(strin.Left(8),NULL,16);
		strin = strin.Mid(8);
		ciphertext[3] = strtoul(strin.Left(8),NULL,16);
		strin = strin.Mid(8);  	
	DecryptProc(ciphertext,plaintext); 	    
    for(int i=0;i<4;i++)
	{
     output[i*4+0]=plaintext[i]>>24;
     output[i*4+1]=plaintext[i]<<8>>24;
     output[i*4+2]=plaintext[i]<<16>>24;
     output[i*4+3]=plaintext[i]<<24>>24;  
    }  
    for(i=0;i<16;i++)   
	{   
     strid.Format("%c",output[i]);   
     strout+=strid;   
	}  	
	}
}

 void Serpent::DecryptProc(ULONG* cipher,ULONG* plain)
 {
 ULONG  x0, x1, x2, x3;
 ULONG  y0, y1, y2, y3;

     
   x0=cipher[0];
   x1=cipher[1];
   x2=cipher[2];
   x3=cipher[3];

   /* Start to decrypt the ciphertext x */
   keying(x0, x1, x2, x3, subkeys[32]);
   InvRND31(x0, x1, x2, x3, y0, y1, y2, y3);
   keying(y0, y1, y2, y3, subkeys[31]);
   inv_transform(y0, y1, y2, y3, x0, x1, x2, x3);
   InvRND30(x0, x1, x2, x3, y0, y1, y2, y3);
   keying(y0, y1, y2, y3, subkeys[30]);
   inv_transform(y0, y1, y2, y3, x0, x1, x2, x3);
   InvRND29(x0, x1, x2, x3, y0, y1, y2, y3);
   keying(y0, y1, y2, y3, subkeys[29]);
   inv_transform(y0, y1, y2, y3, x0, x1, x2, x3);
   InvRND28(x0, x1, x2, x3, y0, y1, y2, y3);
   keying(y0, y1, y2, y3, subkeys[28]);
   inv_transform(y0, y1, y2, y3, x0, x1, x2, x3);
   InvRND27(x0, x1, x2, x3, y0, y1, y2, y3);
   keying(y0, y1, y2, y3, subkeys[27]);
   inv_transform(y0, y1, y2, y3, x0, x1, x2, x3);
   InvRND26(x0, x1, x2, x3, y0, y1, y2, y3);
   keying(y0, y1, y2, y3, subkeys[26]);
   inv_transform(y0, y1, y2, y3, x0, x1, x2, x3);
   InvRND25(x0, x1, x2, x3, y0, y1, y2, y3);
   keying(y0, y1, y2, y3, subkeys[25]);
   inv_transform(y0, y1, y2, y3, x0, x1, x2, x3);
   InvRND24(x0, x1, x2, x3, y0, y1, y2, y3);
   keying(y0, y1, y2, y3, subkeys[24]);
   inv_transform(y0, y1, y2, y3, x0, x1, x2, x3);
   InvRND23(x0, x1, x2, x3, y0, y1, y2, y3);
   keying(y0, y1, y2, y3, subkeys[23]);
   inv_transform(y0, y1, y2, y3, x0, x1, x2, x3);
   InvRND22(x0, x1, x2, x3, y0, y1, y2, y3);
   keying(y0, y1, y2, y3, subkeys[22]);
   inv_transform(y0, y1, y2, y3, x0, x1, x2, x3);
   InvRND21(x0, x1, x2, x3, y0, y1, y2, y3);
   keying(y0, y1, y2, y3, subkeys[21]);
   inv_transform(y0, y1, y2, y3, x0, x1, x2, x3);
   InvRND20(x0, x1, x2, x3, y0, y1, y2, y3);
   keying(y0, y1, y2, y3, subkeys[20]);
   inv_transform(y0, y1, y2, y3, x0, x1, x2, x3);
   InvRND19(x0, x1, x2, x3, y0, y1, y2, y3);
   keying(y0, y1, y2, y3, subkeys[19]);
   inv_transform(y0, y1, y2, y3, x0, x1, x2, x3);
   InvRND18(x0, x1, x2, x3, y0, y1, y2, y3);
   keying(y0, y1, y2, y3, subkeys[18]);
   inv_transform(y0, y1, y2, y3, x0, x1, x2, x3);
   InvRND17(x0, x1, x2, x3, y0, y1, y2, y3);
   keying(y0, y1, y2, y3, subkeys[17]);
   inv_transform(y0, y1, y2, y3, x0, x1, x2, x3);
   InvRND16(x0, x1, x2, x3, y0, y1, y2, y3);
   keying(y0, y1, y2, y3, subkeys[16]);
   inv_transform(y0, y1, y2, y3, x0, x1, x2, x3);
   InvRND15(x0, x1, x2, x3, y0, y1, y2, y3);
   keying(y0, y1, y2, y3, subkeys[15]);
   inv_transform(y0, y1, y2, y3, x0, x1, x2, x3);
   InvRND14(x0, x1, x2, x3, y0, y1, y2, y3);
   keying(y0, y1, y2, y3, subkeys[14]);
   inv_transform(y0, y1, y2, y3, x0, x1, x2, x3);
   InvRND13(x0, x1, x2, x3, y0, y1, y2, y3);
   keying(y0, y1, y2, y3, subkeys[13]);
   inv_transform(y0, y1, y2, y3, x0, x1, x2, x3);
   InvRND12(x0, x1, x2, x3, y0, y1, y2, y3);
   keying(y0, y1, y2, y3, subkeys[12]);
   inv_transform(y0, y1, y2, y3, x0, x1, x2, x3);
   InvRND11(x0, x1, x2, x3, y0, y1, y2, y3);
   keying(y0, y1, y2, y3, subkeys[11]);
   inv_transform(y0, y1, y2, y3, x0, x1, x2, x3);
   InvRND10(x0, x1, x2, x3, y0, y1, y2, y3);
   keying(y0, y1, y2, y3, subkeys[10]);
   inv_transform(y0, y1, y2, y3, x0, x1, x2, x3);
   InvRND09(x0, x1, x2, x3, y0, y1, y2, y3);
   keying(y0, y1, y2, y3, subkeys[ 9]);
   inv_transform(y0, y1, y2, y3, x0, x1, x2, x3);
   InvRND08(x0, x1, x2, x3, y0, y1, y2, y3);
   keying(y0, y1, y2, y3, subkeys[ 8]);
   inv_transform(y0, y1, y2, y3, x0, x1, x2, x3);
   InvRND07(x0, x1, x2, x3, y0, y1, y2, y3);
   keying(y0, y1, y2, y3, subkeys[ 7]);
   inv_transform(y0, y1, y2, y3, x0, x1, x2, x3);
   InvRND06(x0, x1, x2, x3, y0, y1, y2, y3);
   keying(y0, y1, y2, y3, subkeys[ 6]);
   inv_transform(y0, y1, y2, y3, x0, x1, x2, x3);
   InvRND05(x0, x1, x2, x3, y0, y1, y2, y3);
   keying(y0, y1, y2, y3, subkeys[ 5]);
   inv_transform(y0, y1, y2, y3, x0, x1, x2, x3);
   InvRND04(x0, x1, x2, x3, y0, y1, y2, y3);
   keying(y0, y1, y2, y3, subkeys[ 4]);
   inv_transform(y0, y1, y2, y3, x0, x1, x2, x3);
   InvRND03(x0, x1, x2, x3, y0, y1, y2, y3);
   keying(y0, y1, y2, y3, subkeys[ 3]);
   inv_transform(y0, y1, y2, y3, x0, x1, x2, x3);
   InvRND02(x0, x1, x2, x3, y0, y1, y2, y3);
   keying(y0, y1, y2, y3, subkeys[ 2]);
   inv_transform(y0, y1, y2, y3, x0, x1, x2, x3);
   InvRND01(x0, x1, x2, x3, y0, y1, y2, y3);
   keying(y0, y1, y2, y3, subkeys[ 1]);
   inv_transform(y0, y1, y2, y3, x0, x1, x2, x3);
   InvRND00(x0, x1, x2, x3, y0, y1, y2, y3);
   x0 = y0; x1 = y1; x2 = y2; x3 = y3;
   keying(x0, x1, x2, x3, subkeys[ 0]);
  plain[0] = x0;
  plain[1] = x1;
  plain[2] = x2;
  plain[3] = x3;
   /* The plaintext is now in x */
}

⌨️ 快捷键说明

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