欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
30轉(zhuǎn)子恩格瑪機對文件進(jìn)行加密C++源程序
[打印本頁]
作者:
51黑黑
時間:
2016-1-6 01:57
標(biāo)題:
30轉(zhuǎn)子恩格瑪機對文件進(jìn)行加密C++源程序
//加密機轉(zhuǎn)子類
class egm_zz
{
public:
//公共的行為或?qū)傩?br />
egm_zz(char *r,char *l);//構(gòu)造函數(shù)(參數(shù)為接線盤排列信息)
void set_wz(char key);//設(shè)置密鑰(轉(zhuǎn)子初始位置)
void set_guize(int gz);//設(shè)置轉(zhuǎn)動規(guī)則(加密多少字節(jié)轉(zhuǎn)動一次轉(zhuǎn)子)
char get_wz();//返回轉(zhuǎn)子位置
char get_R_L(char data);//從右往左進(jìn)行一次替換
char get_L_R(char data);//從左往右進(jìn)行一次替換
void go();//轉(zhuǎn)子進(jìn)行一次轉(zhuǎn)動判定
private:
//私有的行為或?qū)傩?br />
char R[256];//轉(zhuǎn)子右接線盤
char L[256];//轉(zhuǎn)子左接線盤
char wz;//轉(zhuǎn)子位置
int guize;//轉(zhuǎn)子轉(zhuǎn)動規(guī)則
int guize_A;//轉(zhuǎn)動數(shù)據(jù)累加器
};
//加密機反射板類
class egm_fs
{
public:
//公共的行為或?qū)傩?br />
egm_fs(char *r,char *l);//構(gòu)造反射板
char get_fs(char data);//進(jìn)行一次數(shù)據(jù)替換
private:
//私有的行為或?qū)傩?br />
char R[128];//反射板接線盤共128對接線分別對應(yīng)0x00~0xFF
char L[128];
};
//定義30轉(zhuǎn)子的恩格瑪機
class egm_30
{
public:
//公共的行為或?qū)傩?br />
egm_30();//構(gòu)造函數(shù)
void set_key_wz(char *key);//設(shè)置密鑰串的轉(zhuǎn)子位置部分(30個)
void set_key_guize(int *key);//設(shè)置密鑰串的轉(zhuǎn)子轉(zhuǎn)動規(guī)則部分(30個)
char jiami(char data);//對一個字節(jié)進(jìn)行加密
private:
//私有的行為或?qū)傩?br />
egm_zz *zz[30];//30個轉(zhuǎn)子對象
egm_fs *fs;//1個反射板對象
};
//對一個字節(jié)進(jìn)行加密(核心算法)
char egm_30::jiami(char data)
{
int i;
int d;
d=data;
d=d+zz[0]->get_wz();
if(d>255) d-=256; //修正并定位轉(zhuǎn)動后的0號轉(zhuǎn)子的觸點位置
d=zz[0]->get_R_L((char)d);
//1號到29號轉(zhuǎn)子從右往左處理一輪
for(i=0;i<29;i++)
{
if(zz[i]->get_wz()<zz[i+1]->get_wz())
{
d=d+(zz[i+1]->get_wz()-zz[i]->get_wz());
if(d>255) d-=256;
}
if(zz[i]->get_wz()>zz[i+1]->get_wz())
{
d=d-(zz[i]->get_wz()-zz[i+1]->get_wz());
if(d<0) d+=256;
}
d=zz[i+1]->get_R_L((char)d);
}
//反射板處理一次數(shù)據(jù)
d=d-zz[29]->get_wz();
if(d<0) d+=256;
d=fs->get_fs((char)d);
//29號轉(zhuǎn)子左到右處理
d=d+zz[29]->get_wz();
if(d>255) d-=256;
d=zz[29]->get_L_R((char)d);
//28號到0號轉(zhuǎn)子從左往右處理一輪
for(i=29;i>0;i--)
{
if(zz[i]->get_wz()<zz[i-1]->get_wz())
{
d=d+(zz[i-1]->get_wz()-zz[i]->get_wz());
if(d>255) d-=256;
}
if(zz[i]->get_wz()>zz[i-1]->get_wz())
{
d=d-(zz[i]->get_wz()-zz[i-1]->get_wz());
if(d<0) d+=256;
}
d=zz[i-1]->get_L_R((char)d);
}
d=d-zz[0]->get_wz();
if(d<0) d+=256;
//轉(zhuǎn)子轉(zhuǎn)動處理
for(i=0;i<30;i++)
{
zz[i]->go();
}
return (char)d;
}
復(fù)制代碼
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1