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

📄 blowfish.cpp

📁 blowfish加密算法的编码类
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, 
		0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb, 
		0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47, 
		0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, 
		0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048, 
		0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd, 
		0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, 
		0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f, 
		0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, 
		0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, 
		0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e, 
		0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d, 
		0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, 
		0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, 
		0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a, 
		0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, 
		0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060, 
		0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9, 
		0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6
	}
};
const unsigned long CBlowfish::pbox[18]=
{
	0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89, 
	0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, 
	0x9216d5d9, 0x8979fb1b
};
CBlowfish::CBlowfish()
{

}

CBlowfish::~CBlowfish()
{

}

void CBlowfish::BlowfishKeyInit(const char *szKey, int nStrLen)
{
	memcpy(keybox,pbox,sizeof(long)*18);
	memcpy(keybox+18,sbox,sizeof(long)*256*4);
	int oldlen=nStrLen,i;
	char szkey[72*2],*cp;
	memset(szkey,0,72*2);
	if(nStrLen<72)
	{
		nStrLen=0;
		while(nStrLen<72)
		{
			strcat(szkey,szKey);
			nStrLen+=oldlen;
		}
	}
	else 
		strncpy(szkey,szKey,72);
	cp=szkey;
	unsigned long* pKey=(unsigned long*)cp;
	for (i=0;i<18;i++)
		keybox[i]^=pKey[i];
	unsigned long xl=0,xr=0;
	for (i=0;i<521;i++)
	{
		BlowfishEn(xl,xr);
		keybox[2*i]=xl;
		keybox[2*i+1]=xr;
	}
}

void CBlowfish::BlowfishEn(unsigned long &XL, unsigned long &XR)
{
	unsigned long xl=XL,xr=XR,temp;
	int i;
	for (i=0;i<16;i++)
	{
		xl^=keybox[i];
		xr^=F((const char*)&xl);
		swap(xl,xr,temp);
	}
	swap(xl,xr,temp);
	xr^=keybox[16];
	xl^=keybox[17];
	XL=xl;
	XR=xr;
}

void CBlowfish::BlowfishDe(unsigned long &XL, unsigned long &XR)
{
	unsigned long xl=XL,xr=XR,temp;
	int i;
	for (i=17;i>1;i--)
	{
		xl^=keybox[i];
		xr^=F((const char*)&xl);
		swap(xl,xr,temp);
	}
	swap(xl,xr,temp);
	xr^=keybox[1];
	xl^=keybox[0];
	XL=xl;
	XR=xr;
}

void CBlowfish::Blowfish(char *szMessage, char type)
{
	int len=strlen(szMessage);
	int i;
	unsigned long* pul=NULL;
	if(type=='e')
	{
		while(len%8!=0)szMessage[len++]=0;
		for (i=0;i<len;i+=8)
			BlowfishEn((unsigned long&)szMessage[i],(unsigned long&)szMessage[i+4]);
	}
	else 
	{
		for (i=0;i<len;i+=8)
			BlowfishDe((unsigned long&)szMessage[i],(unsigned long&)szMessage[i+4]);
	}
}

unsigned long CBlowfish::F(const char index[])
{
	unsigned long temp;
	temp=keybox[SBOX_BEGIN+index[3]]+keybox[SBOX_BEGIN+256+index[2]];
	temp^=keybox[SBOX_BEGIN+256*2+index[1]];
	temp+=keybox[SBOX_BEGIN+256*3+index[0]];
	return temp;
}

⌨️ 快捷键说明

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