亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? des.cpp

?? des加密算法 des加密算法 des加密算法 解密
?? CPP
字號:

#include <iostream>
using namespace std;

#define BIT	 bool
#define BYTE unsigned char

class Des
{
private:	
	BIT	subKey[16][48];				

	static BYTE Etable[48];			
	static BYTE Ptable[32];			
	static BYTE IpTable[64];		
	static BYTE IprTable[64];		
	static BYTE Pc1Table[56];		
	static BYTE Pc2Table[48];		
	static BYTE LoopTable[16];		
	static BYTE Sbox[8][4][16];		

public:
	Des();

	void Cipher(BYTE out[8], const BYTE in[8]);		
	void InvCipher(BYTE out[8], const BYTE in[8]);  

	void SetKey(const BYTE key[8]);											
	static void Ffunc(BIT in[32], const BIT ki[48]);							
	static void Sfunc(BIT out[32], const BIT in[48]);						
	static void RotateL(BIT *in, int len, int loop);						
	static void Xor(BIT *ina, const BIT *inb, int len);						
	static void ByteToBit(BIT *out, const BYTE *in, int bits);				
	static void BitToByte(BYTE *out, const BIT *in, int bits);				
	static void Transform(BIT *out, BIT *in, const BYTE *table, int len);	

private:
	Des(const Des& des);
	Des operator=(const Des& des);
};



Des::Des()
{
}


BYTE Des::IpTable[64] = {
	58, 50, 42, 34, 26, 18, 10,  2, 
	60, 52, 44, 36, 28, 20, 12,  4,
	62, 54, 46, 38, 30, 22, 14,  6,
	64, 56, 48, 40, 32, 24, 16,  8,
	57, 49, 41, 33, 25, 17,  9,  1,
	59, 51, 43, 35, 27, 19, 11,  3,
	61, 53, 45, 37, 29, 21, 13,  5,
	63, 55, 47, 39, 31, 23, 15,  7
};

BYTE Des::IprTable[64] = {
	40,  8, 48, 16, 56, 24, 64, 32,
	39,  7, 47, 15, 55, 23, 63, 31,
	38,  6, 46, 14, 54, 22, 62, 30, 
	37,  5, 45, 13, 53, 21, 61, 29,
	36,  4, 44, 12, 52, 20, 60, 28,
	35,  3, 43, 11, 51, 19, 59, 27,
	34,  2, 42, 10, 50, 18, 58, 26,
	33,  1, 41,  9, 49, 17, 57, 25
};


BYTE Des::Etable[48] = {
	32,  1,  2,  3,  4,  5,  4,  5,
	 6,	 7,  8,  9,  8,  9, 10, 11, 
	12, 13, 12, 13, 14, 15, 16, 17,
	16, 17, 18, 19, 20, 21, 20, 21,
	22, 23, 24, 25, 24, 25, 26, 27, 
	28, 29, 28, 29, 30, 31, 32,  1
};


BYTE Des::Ptable[32]={
	16,  7, 20, 21, 29, 12, 28, 17,
	 1, 15, 23, 26,  5, 18, 31, 10,
	 2,  8, 24, 14, 32, 27,  3,  9,
	19, 13, 30,  6, 22, 11,  4, 25
};


BYTE Des::Pc1Table[56]={
	57, 49, 41, 33, 25, 17,  9,  1,
	58, 50, 42, 34, 26, 18, 10,  2,
	59, 51, 43, 35, 27, 19, 11,  3,
	60, 52, 44, 36, 63, 55, 47, 39,
	31, 23, 15,  7, 62, 54, 46, 38,
	30, 22, 14,  6, 61, 53, 45, 37,
	29, 21, 13,  5, 28, 20, 12,  4
};


BYTE Des::Pc2Table[48] = {
	14, 17, 11, 24,  1,  5,  3, 28,
	15,  6, 21, 10, 23, 19, 12,  4,
	26,  8, 16,  7, 27, 20, 13,  2,
	41, 52, 31, 37, 47, 55, 30, 40,
	51, 45, 33, 48, 44, 49, 39, 56,
	34, 53, 46, 42, 50, 36, 29, 32
};


BYTE Des::LoopTable[16] = {
	 1,  1,  2,  2,  2,  2,  2,  2,
	 1,  2,  2,  2,  2,  2,  2,  1
};


BYTE Des::Sbox[8][4][16] = {
       //s1
       14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7,
       0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8,
       4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0,
       15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13,
       //s2
       15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10,
       3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5,
       0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15,
       13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9,
       //s3
       10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8,
       13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1,
       13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7,
       1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12,
       //s4
       7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15,
       13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9,
       10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4,
       3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14,
       //s5
       2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9,
       14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6,
       4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14,
       11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3,
       //s6
       12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11,
       10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8,
       9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6,
       4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13,
       //s7
       4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1,
       13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6,
       1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2,
       6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12,
       //s8
       13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7,
       1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2,
       7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8,
       2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11
};


void Des::SetKey(const BYTE key[8])
{
	static BIT	k[64], 
				*kl=&k[0], 
				*kr=&k[28];

	ByteToBit(k, key, 64);

	Transform(k, k, Pc1Table, 56);

	for(int i=0; i<16; i++)
	{
		RotateL(kl, 28, LoopTable[i]);

		RotateL(kr, 28, LoopTable[i]);

		Transform(subKey[i], k, Pc2Table, 48);
	}
}


void Des::Ffunc(BIT in[32], const BIT ki[48])
{
	static BIT mr[48];

	Transform(mr, in, Etable, 48);			

	Xor(mr, ki, 48);						// 子密鑰

	Sfunc(in, mr);							// S盒替換

	Transform(in, in, Ptable, 32);			// P盒替換
}


void Des::Sfunc(BIT out[32], const BIT in[48])
{
	for(BYTE i=0, j, k; i<8; i++, in+=6, out+=4)
	{
		j = (in[0] << 1) + in[5];
		k = (in[1] << 3) + (in[2] << 2) + (in[3] << 1) + in[4];
		ByteToBit(out, &Sbox[i][j][k], 4);
	}
}


void Des::RotateL(BIT *in, int len, int loop)
{
	static BIT tmp[256];
	memcpy(tmp, in, sizeof(BIT) * loop);
	memcpy(in, in+loop, sizeof(BIT) * (len-loop));
	memcpy(in+len-loop, tmp, sizeof(BIT) * loop);
}


void Des::Xor(BIT *ina, const BIT *inb, int len)
{
	for(int i=0; i<len; i++)
	{
		ina[i] ^= inb[i];
	}
}


void Des::ByteToBit(BIT *out, const BYTE *in, int bits)
{
	for(int i=0; i<bits; i++)
	{
		out[i] = (in[i/8] >> (i%8)) & 1;
	}
}


void Des::BitToByte(BYTE *out, const BIT *in, int bits)
{
	memset(out, 0, (bits+7) / 8);
    
	for(int i=0; i<bits; i++)
	{
		out[i/8] |= in[i] << (i%8);
	}
}

		
void Des::Transform(BIT *out, BIT *in, const BYTE *table, int len)
{
	static BIT tmp[256];

	for(int i=0; i<len; i++)
	{
		tmp[i] = in[table[i]-1];
	}

	memcpy(out, tmp, sizeof(BIT) * len);
}


void Des::Cipher(BYTE out[8], const BYTE in[8])
{
	static BIT	m[64],
				tmp[32],
				*li = &m[0], 
				*ri=&m[32];

	ByteToBit(m, in, 64);

	Transform(m, m, IpTable, 64);

	for(int i=0; i<16; i++)
	{
		memcpy(tmp, ri, 32);

		Ffunc(ri, subKey[i]);

		Xor(ri, li, 32);

		memcpy(li, tmp, 32);
	}

	Transform(m, m, IprTable, 64);

	BitToByte(out, m, 64);
}


void Des::InvCipher(BYTE out[8], const BYTE in[8])
{
	static BIT	m[64],
				tmp[32],
				*li = &m[0], 
				*ri=&m[32];

	ByteToBit(m, in, 64);

	Transform(m, m, IpTable, 64);

	for(int i=15; i>=0; i--)
	{
		memcpy(tmp, li, 32);

		Ffunc(li,subKey[i]);

		Xor(li, ri, 32);

		memcpy(ri, tmp, 32);
	}

	Transform(m, m, IprTable, 64);

	BitToByte(out, m, 64);
}


#include <iostream>
using namespace std;

void main()
{

		BYTE keyNeed[16];
		BYTE key[8];
		BYTE str[8];
		int i;

	   cout<<"Input Key:"<<endl;
	   cin>>keyNeed;
	   for(i=0;i<16;i+=2)
		   key[(int)(i/2)]=keyNeed[i]*16+keyNeed[i+1];
		   
       cout<<"Input Plain Text:"<<endl;

       cin>>str;


       Des des;
	   
	   des.SetKey(key);

       des.Cipher(str, str);

       cout<<"Cipher Text:"<<endl<<str<<endl;

       cout<<"Decryption:"<<endl;

       des.InvCipher(str, str);

       cout<<str<<endl;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲免费在线看| 色综合色狠狠综合色| 欧美肥妇bbw| 亚洲成a人片在线观看中文| 在线看不卡av| 天堂在线一区二区| 日韩一级成人av| 精品一区二区三区欧美| ww久久中文字幕| 成人动漫av在线| 亚洲最新视频在线观看| 欧美日本国产视频| 开心九九激情九九欧美日韩精美视频电影 | 中文字幕一区二区三| 97久久精品人人爽人人爽蜜臀| 亚洲猫色日本管| 欧美精品一卡两卡| 国产精品1024| 亚洲男同性恋视频| 日韩一区二区三区三四区视频在线观看 | 色国产综合视频| 日韩av电影免费观看高清完整版在线观看| 日韩视频不卡中文| www.性欧美| 日本欧美一区二区| 国产精品丝袜一区| 欧美一区二区精品在线| 国v精品久久久网| 无吗不卡中文字幕| 中日韩免费视频中文字幕| 欧美自拍丝袜亚洲| 国产精品一区在线观看乱码 | 欧美成人精精品一区二区频| 成人av中文字幕| 日本不卡123| 亚洲欧美一区二区三区孕妇| 日韩三级视频在线观看| 91免费在线播放| 国产一区二区三区综合| 亚洲午夜国产一区99re久久| 国产午夜精品一区二区三区视频| 欧美人体做爰大胆视频| 成人精品一区二区三区四区| 伦理电影国产精品| 一区二区在线免费| 亚洲国产激情av| 欧美一级久久久久久久大片| 色香色香欲天天天影视综合网| 国内一区二区视频| 日韩经典中文字幕一区| 亚洲欧美区自拍先锋| 久久久www免费人成精品| 欧美精品免费视频| 97久久超碰国产精品电影| 国产乱码字幕精品高清av| 图片区小说区区亚洲影院| 1024国产精品| 国产视频一区在线播放| 精品国产伦一区二区三区观看体验 | 日韩av网站在线观看| 亚洲高清久久久| 亚洲精品中文在线观看| 国产精品素人视频| 国产午夜亚洲精品午夜鲁丝片| 日韩免费视频一区二区| 717成人午夜免费福利电影| 91久久精品网| 91日韩一区二区三区| 成人久久久精品乱码一区二区三区 | 国产精品网友自拍| 成人高清视频在线| 91日韩精品一区| 亚洲成av人影院在线观看网| 自拍偷拍欧美激情| 日韩理论电影院| 中文字幕日韩欧美一区二区三区| 国产日韩欧美高清| 日本一区二区在线不卡| 国产亚洲一二三区| 国产嫩草影院久久久久| 国产女人18水真多18精品一级做| 国产日韩欧美制服另类| 久久精品免费在线观看| 色综合一个色综合亚洲| 成人动漫av在线| 91麻豆免费在线观看| 成人免费视频视频在线观看免费| 国产精品888| 国产高清精品在线| 波多野结衣亚洲一区| 91天堂素人约啪| 色哟哟精品一区| 欧美日韩一区二区三区高清| www.成人在线| 91麻豆精品国产91久久久使用方法| 在线免费一区三区| 欧美日精品一区视频| 欧美天天综合网| 欧美日韩1234| 久久亚洲免费视频| 久久精品视频在线免费观看| 国产欧美视频一区二区三区| 美国十次综合导航| 亚洲视频在线一区| 亚洲一区二区黄色| 精品一区二区久久| 国产91色综合久久免费分享| 91香蕉国产在线观看软件| 在线观看不卡视频| 日韩网站在线看片你懂的| 久久久久久麻豆| 亚洲欧美在线视频观看| 偷拍亚洲欧洲综合| 国产精品亚洲а∨天堂免在线| 一本大道av一区二区在线播放| 在线免费观看视频一区| 精品日韩欧美一区二区| 国产精品久久久久四虎| 亚洲成av人片观看| 国产**成人网毛片九色| 欧美日本一道本| 国产精品亲子伦对白| 亚洲精品日韩综合观看成人91| 日韩黄色片在线观看| 成人久久视频在线观看| 欧美一级艳片视频免费观看| 国产精品二区一区二区aⅴ污介绍| 午夜精品久久久久久久99樱桃 | 欧美丰满高潮xxxx喷水动漫| 国产三级欧美三级| 日韩av在线播放中文字幕| jiyouzz国产精品久久| 91精品国产一区二区三区| 一区精品在线播放| 国产自产2019最新不卡| 在线观看欧美黄色| 中文字幕一区二区在线观看| 人人超碰91尤物精品国产| 91色porny| 国产喷白浆一区二区三区| 日韩电影免费在线观看网站| www.久久久久久久久| 久久久久国色av免费看影院| 午夜精品爽啪视频| 色视频成人在线观看免| 国产蜜臀av在线一区二区三区| 免费在线视频一区| 欧美午夜电影网| 亚洲精品日韩专区silk| 粉嫩蜜臀av国产精品网站| 日韩视频在线一区二区| 亚洲国产精品天堂| 91精彩视频在线观看| 国产精品沙发午睡系列990531| 激情欧美一区二区| 日韩一卡二卡三卡| 日本一区中文字幕| 欧美日韩国产不卡| 亚洲曰韩产成在线| 在线视频综合导航| 亚洲免费av在线| 91天堂素人约啪| 亚洲天天做日日做天天谢日日欢 | 亚洲精品欧美在线| 色一区在线观看| 亚洲制服欧美中文字幕中文字幕| 色诱亚洲精品久久久久久| 综合久久给合久久狠狠狠97色| 成人免费高清在线| 亚洲色欲色欲www| 91黄视频在线| 午夜欧美在线一二页| 欧美日韩精品福利| 婷婷综合在线观看| 欧美男人的天堂一二区| 天天影视网天天综合色在线播放 | 91污片在线观看| 一区二区视频免费在线观看| 在线欧美一区二区| 天天爽夜夜爽夜夜爽精品视频| 欧美日本视频在线| 精品亚洲成a人在线观看| 久久精品视频网| 成人激情开心网| 又紧又大又爽精品一区二区| 欧美吻胸吃奶大尺度电影| 午夜精品久久久久久久| 欧美mv日韩mv| 高清视频一区二区| 一区二区国产视频| 欧美一区二区三区性视频| 国产综合色产在线精品| 1000部国产精品成人观看| 色老头久久综合| 麻豆国产精品官网| 中文在线一区二区| 欧美日韩一区三区| 精品一区二区三区免费播放| 国产精品天天看| 91麻豆精品国产自产在线|