📄 blowfish.cpp
字号:
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 + -