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

📄 blowfish.cpp

📁 一个与金融方面有关的问题
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4, 0x88f46dba,
    0x03a16125, 0x0564f0bd, 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a,
    0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, 0x7533d928, 0xb155fdf5,
    0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,
    0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce,
    0x5121ce64, 0x774fbe32, 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}
};


int BlowFish::gBlowFishFunction(int data32)
{
	char a, b, c, d;
	a = (data32 & 0xff000000) >> 24;
	b = (data32 & 0xff0000) >> 16;
	c = (data32 & 0xff00) >> 8;
	d = data32 & 0xff;
	return (gKeyBoxes[a + 18] + gKeyBoxes[b + 18 + 256]) ^ gKeyBoxes[c + 18 + 512] + gKeyBoxes[d + 18 + 768];
}

__int64 BlowFish::gBlowFishEnCode(__int64 data64)
{
	int i;
	int xL, xR, xL0, xR0;
	__int64 r;

	xL0 = data64 >> 32;
	xR0 = data64 & 0x00000000ffffffff;

	for(i = 0; i < 16; i++)
	{
		xR = xL0 ^ gKeyBoxes[i];
		xL = gBlowFishFunction(xR) ^ xR0;
		xL0 = xL;
		xR0 = xR;
	}
	xR = xL0 ^ gKeyBoxes[16];
	xL = xR0 ^ gKeyBoxes[17];
	r = xL;
	r = (r << 32) | xR;
	return r;
}

void BlowFish::gBlowFishEnCode(const BYTE *pSrc, BYTE *pDest)
{
	int i;
	int xL, xR, xL0, xR0;

	for(i = 0, xL0 = 0; i < 4; i++) xL0 |= (pSrc[i] << (i*8));
	for(i = 0, xR0 = 0; i < 4; i++) xR0 |= (pSrc[i + 4] << (i*8));

	for(i = 0; i < 16; i++)
	{
		xR = xL0 ^ gKeyBoxes[i];
		xL = gBlowFishFunction(xR) ^ xR0;
		xL0 = xL;
		xR0 = xR;
	}
	xR = xL0 ^ gKeyBoxes[16];
	xL = xR0 ^ gKeyBoxes[17];
	for(i = 3; i >= 0; i--) pDest[i] = xL >> (i*8);
}

__int64 BlowFish::gBlowFishDeCode(__int64 data64)
{
	int i;
	int xL, xR, xL0, xR0;
	__int64 r;

	xL0 = data64 >> 32;
	xR0 = data64 & 0x00000000ffffffff;
	for(i = 0; i < 16; i++)
	{
		xR = xL0 ^ gKeyBoxes[17 - i];
		xL = gBlowFishFunction(xR) ^ xR0;
		xR0 = xR;
		xL0 = xL;
	}

	xL = xR0 ^ gKeyBoxes[0];
	xR = xL0 ^ gKeyBoxes[1];
	r = xL;
	r = (r << 32) | xR;
	return r;
}

void BlowFish::gBlowFishDeCode(const BYTE *pSrc, BYTE *pDest)
{
	int i;
	int xL, xR, xL0, xR0;
	__int64 r;

	for(i = 0, xL = 0; i < 4; i++) xL |= (pSrc[i] << (i*8));
	for(i = 0, xR = 0; i < 4; i++) xR |= (pSrc[i + 4] << (i*8));
	xR0 = xL ^ gKeyBoxes[17];
	xL0 = xR ^ gKeyBoxes[16];
	for(i = 15; i >= 0; i--)
	{
		xL = xL0;
		xR = xR0;
		xL0 = xR ^ gKeyBoxes[i];
		xR0 = gBlowFishFunction(xR) ^ xL;
	}
	for(i = 3; i >= 0; i--) pDest[i] = xL0 >> (i*8);
	for(i = 3; i >= 0; i--) pDest[i + 4] = xR0 >> (i*8);
}

void BlowFish::gBlowFishInit(const BYTE *passport)
{
	int i, j, k;
	int tmp;
	__int64 data64;
	memset(gKeyBoxes, 0, sizeof(gKeyBoxes));

	for(i = 0, j = 0; i < 18; i++)
	{
		tmp = 0;
		for(k = 0; k < 3; k++)
		{
			tmp = (tmp << 8) | passport[j++];
			if(j >= 8) j = 0;
		}
		gKeyBoxes[i] = gPBox[i] ^ tmp;
	}

	for(i = 0; i < 4; i++)
		for(j = 0; j < 256; j++) gKeyBoxes[i*256 + j + 18] = gSBox[i][j];

	data64 = 0;
	for(i = 0; i < 521; i++)
	{
		data64 = gBlowFishEnCode(data64);
		gKeyBoxes[i*2] = data64 >> 32;
		gKeyBoxes[i*2 + 1] = data64 & 0x00000000ffffffff;
	}
}

⌨️ 快捷键说明

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