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

📄 blowfish.c

📁 外国开源的硬盘加密软件
💻 C
📖 第 1 页 / 共 2 页
字号:
 1779581495U, 3079819751U,  111262694U, 1274766160U,
  443224088U,  298511866U, 1025883608U, 3806446537U,
 1145181785U,  168956806U, 3641502830U, 3584813610U,
 1689216846U, 3666258015U, 3200248200U, 1692713982U,
 2646376535U, 4042768518U, 1618508792U, 1610833997U,
 3523052358U, 4130873264U, 2001055236U, 3610705100U,
 2202168115U, 4028541809U, 2961195399U, 1006657119U,
 2006996926U, 3186142756U, 1430667929U, 3210227297U,
 1314452623U, 4074634658U, 4101304120U, 2273951170U,
 1399257539U, 3367210612U, 3027628629U, 1190975929U,
 2062231137U, 2333990788U, 2221543033U, 2438960610U,
 1181637006U,  548689776U, 2362791313U, 3372408396U,
 3104550113U, 3145860560U,  296247880U, 1970579870U,
 3078560182U, 3769228297U, 1714227617U, 3291629107U,
 3898220290U,  166772364U, 1251581989U,  493813264U,
  448347421U,  195405023U, 2709975567U,  677966185U,
 3703036547U, 1463355134U, 2715995803U, 1338867538U,
 1343315457U, 2802222074U, 2684532164U,  233230375U,
 2599980071U, 2000651841U, 3277868038U, 1638401717U,
 4028070440U, 3237316320U,    6314154U,  819756386U,
  300326615U,  590932579U, 1405279636U, 3267499572U,
 3150704214U, 2428286686U, 3959192993U, 3461946742U,
 1862657033U, 1266418056U,  963775037U, 2089974820U,
 2263052895U, 1917689273U,  448879540U, 3550394620U,
 3981727096U,  150775221U, 3627908307U, 1303187396U,
  508620638U, 2975983352U, 2726630617U, 1817252668U,
 1876281319U, 1457606340U,  908771278U, 3720792119U,
 3617206836U, 2455994898U, 1729034894U, 1080033504U,

  976866871U, 3556439503U, 2881648439U, 1522871579U,
 1555064734U, 1336096578U, 3548522304U, 2579274686U,
 3574697629U, 3205460757U, 3593280638U, 3338716283U,
 3079412587U,  564236357U, 2993598910U, 1781952180U,
 1464380207U, 3163844217U, 3332601554U, 1699332808U,
 1393555694U, 1183702653U, 3581086237U, 1288719814U,
  691649499U, 2847557200U, 2895455976U, 3193889540U,
 2717570544U, 1781354906U, 1676643554U, 2592534050U,
 3230253752U, 1126444790U, 2770207658U, 2633158820U,
 2210423226U, 2615765581U, 2414155088U, 3127139286U,
  673620729U, 2805611233U, 1269405062U, 4015350505U,
 3341807571U, 4149409754U, 1057255273U, 2012875353U,
 2162469141U, 2276492801U, 2601117357U,  993977747U,
 3918593370U, 2654263191U,  753973209U,   36408145U,
 2530585658U,   25011837U, 3520020182U, 2088578344U,
  530523599U, 2918365339U, 1524020338U, 1518925132U,
 3760827505U, 3759777254U, 1202760957U, 3985898139U,
 3906192525U,  674977740U, 4174734889U, 2031300136U,
 2019492241U, 3983892565U, 4153806404U, 3822280332U,
  352677332U, 2297720250U,   60907813U,   90501309U,
 3286998549U, 1016092578U, 2535922412U, 2839152426U,
  457141659U,  509813237U, 4120667899U,  652014361U,
 1966332200U, 2975202805U,   55981186U, 2327461051U,
  676427537U, 3255491064U, 2882294119U, 3433927263U,
 1307055953U,  942726286U,  933058658U, 2468411793U,
 3933900994U, 4215176142U, 1361170020U, 2001714738U,
 2830558078U, 3274259782U, 1222529897U, 1679025792U,
 2729314320U, 3714953764U, 1770335741U,  151462246U,
 3013232138U, 1682292957U, 1483529935U,  471910574U,
 1539241949U,  458788160U, 3436315007U, 1807016891U,
 3718408830U,  978976581U, 1043663428U, 3165965781U,
 1927990952U, 4200891579U, 2372276910U, 3208408903U,
 3533431907U, 1412390302U, 2931980059U, 4132332400U,
 1947078029U, 3881505623U, 4168226417U, 2941484381U,
 1077988104U, 1320477388U,  886195818U,   18198404U,
 3786409000U, 2509781533U,  112762804U, 3463356488U,
 1866414978U,  891333506U,   18488651U,  661792760U,
 1628790961U, 3885187036U, 3141171499U,  876946877U,
 2693282273U, 1372485963U,  791857591U, 2686433993U,
 3759982718U, 3167212022U, 3472953795U, 2716379847U,
  445679433U, 3561995674U, 3504004811U, 3574258232U,
   54117162U, 3331405415U, 2381918588U, 3769707343U,
 4154350007U, 1140177722U, 4074052095U,  668550556U,
 3214352940U,  367459370U,  261225585U, 2610173221U,
 4209349473U, 3468074219U, 3265815641U,  314222801U,
 3066103646U, 3808782860U,  282218597U, 3406013506U,
 3773591054U,  379116347U, 1285071038U,  846784868U,
 2669647154U, 3771962079U, 3550491691U, 2305946142U,
  453669953U, 1268987020U, 3317592352U, 3279303384U,
 3744833421U, 2610507566U, 3859509063U,  266596637U,
 3847019092U,  517658769U, 3462560207U, 3443424879U,
  370717030U, 4247526661U, 2224018117U, 4143653529U,
 4112773975U, 2788324899U, 2477274417U, 1456262402U,
 2901442914U, 1517677493U, 1846949527U, 2295493580U,
 3734397586U, 2176403920U, 1280348187U, 1908823572U,
 3871786941U,  846861322U, 1172426758U, 3287448474U,
 3383383037U, 1655181056U, 3139813346U,  901632758U,
 1897031941U, 2986607138U, 3066810236U, 3447102507U,
 1393639104U,  373351379U,  950779232U,  625454576U,
 3124240540U, 4148612726U, 2007998917U,  544563296U,
 2244738638U, 2330496472U, 2058025392U, 1291430526U,
  424198748U,   50039436U,   29584100U, 3605783033U,
 2429876329U, 2791104160U, 1057563949U, 3255363231U,
 3075367218U, 3463963227U, 1469046755U,  985887462U
};


// this version is only used to make pbox and sbox
static void crypt_block(BF_KEY *key, const word32 in[2], word32 out[2])
{
	word32 left = in[0];
	word32 right = in[1];

	const word32 *const s=key->sbox;
	const word32 *p=key->pbox;

	unsigned i;

	left ^= p[0];

	for (i=0; i<ROUNDS/2; i++)
	{
		right ^= (((s[GETBYTE(left,3)] + s[256+GETBYTE(left,2)])
			  ^ s[2*256+GETBYTE(left,1)]) + s[3*256+GETBYTE(left,0)])
			  ^ p[2*i+1];

		left ^= (((s[GETBYTE(right,3)] + s[256+GETBYTE(right,2)])
			 ^ s[2*256+GETBYTE(right,1)]) + s[3*256+GETBYTE(right,0)])
			 ^ p[2*i+2];
	}

	right ^= p[ROUNDS+1];

	out[0] = right;
	out[1] = left;
}


void BlowfishSetKey (BF_KEY *key, int keylength, unsigned char *key_string)
{
	unsigned i, j=0, k;
	word32 data, dspace[2] = {0, 0};
	word32 *sbox = key->sbox;
	word32 *pbox = key->pbox;

	memcpy(pbox, p_init, sizeof(p_init));
	memcpy(sbox, s_init, sizeof(s_init));

	// Xor key string into encryption key vector
	for (i=0 ; i<ROUNDS+2 ; ++i)
	{
		data = 0 ;
		for (k=0 ; k<4 ; ++k )
			data = (data << 8) | key_string[j++ % keylength];
		pbox[i] ^= data;
	}

	crypt_block(key, dspace, pbox);

	for (i=0; i<ROUNDS; i+=2)
		crypt_block(key, pbox+i, pbox+i+2);

	crypt_block(key, pbox+ROUNDS, sbox);

	for (i=0; i<4*256-2; i+=2)
		crypt_block(key, sbox+i, sbox+i+2);

	for (i=0; i < ROUNDS+2; i++)
		key->pbox_dec[ROUNDS+1-i] = pbox[i];
}


void BlowfishEncryptLE (unsigned char *inBlock, unsigned char *outBlock, BF_KEY *key, int encrypt)
{
	word32 left = LE32 (((word32 *) inBlock)[0]);
	word32 right = LE32 (((word32 *) inBlock)[1]);

	const word32 *const s = key->sbox;
	const word32 * p = encrypt ? key->pbox : key->pbox_dec;

	unsigned i;

	left ^= p[0];

	for (i=0; i<ROUNDS/2; i++)
	{
		right ^= (((s[GETBYTE(left,3)] + s[256+GETBYTE(left,2)])
			  ^ s[2*256+GETBYTE(left,1)]) + s[3*256+GETBYTE(left,0)])
			  ^ p[2*i+1];

		left ^= (((s[GETBYTE(right,3)] + s[256+GETBYTE(right,2)])
			 ^ s[2*256+GETBYTE(right,1)]) + s[3*256+GETBYTE(right,0)])
			 ^ p[2*i+2];
	}

	right ^= p[ROUNDS+1];

	((word32 *) outBlock)[0] = LE32 (right);
	((word32 *) outBlock)[1] = LE32 (left);
}

⌨️ 快捷键说明

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