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

📄 des3r.h

📁 des preko c neznam hocel pomoci
💻 H
字号:
/* DES3r.h *//* Implementacija DES kriptosustava *//* 2004. godina *//* Autor: Darko Poljak *//* Modifikacija 2005. : reduciran DES na 3 runde */#ifndef __DES3r#define __DES3r 1#include "cryptosystem.h"// tablice	/* Permutacija PC1 */	const static uint8 DES_KiPerm[]={		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	};	/* rotacije za generiranje podkljuceva */	const static uint8 DES_rot[]={		1, 1, 2, 2, 2, 2, 2, 2, 1, 2,		2, 2, 2, 2, 2, 1	};	/* permutacija PC2 */	const static uint8 DES_Ki[]={		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	};	/* inicijalna permutacija */	const static uint8 DES_IP[]={		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	};	/* ekspanzija 32-bita na 48-bita u F funkciji */	const static uint8 DES_EBSel[]={		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	};	/* S kutije */	const static uint8 DES_s[][64]={		{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},{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},{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},{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},{ 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},{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},{ 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},{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}	};	/* permutacija P */	const static uint8 DES_P[]={		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	};	/* konacna permutacija (inverz od IP) */	const static uint8 DES_IPInv[]={		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	};	/* losi kljucevi */	const static char *BAD_KEYS[16]={		"0101010101010101",		"1F1F1F1F0E0E0E0E",		"E0E0E0E0F1F1F1F1",		"FEFEFEFEFEFEFEFE",		"01FE01FE01FE01FE",		"FE01FE01FE01FE01",		"1FE01FE00EF10EF1",		"E0F1E0F1F10EF10E",		"01E001E001F101F1",		"E001E001F101F101",		"1FFE1FFE0EFE0EFE",		"FE1FFE1FFE0EFE0E",		"011F011F010E010E",		"1F011F010E010E01",		"E0FEE0FEF1FEF1FE",		"FEE0FEE0FEF1FEF1"	};class DES3r: public CryptoSystem {private:	/* glavni kljuc */	bit _key[64];	/* podkljucevi */	bit _subkey[3][48]; /* reducirano na 3 runde */	/* rotacija lijevo polja bitova a velicine size za r bitova */	void rotateLeft(bit *a,size_t size,size_t r);	/* racunanje PC1 ulaza input, rezultat je output */	void computeKiPerm(bit input[64],bit output[56]);	/* podjela polja input velicine insize na lijevu i desnu polovicu */	void splitBlock(bit input[],size_t insize,bit left[],bit right[]);	/* spajanje dva polja velicine halfsize u jedno polje output */	void concatBlock(bit left[],bit right[],size_t halfsize,bit output[]);	/* PC2 */	void computeKi(bit input[56],bit output[48]);	/* IP */	void computeIP(bit input[64],bit output[64]);	/* F f-ja nad ulazom input, kljucem key, rezultat je output */	void computeF(bit input[32],bit key[48],bit output[32]);	/* ekspanzija */	void computeEBSel(bit input[32],bit output[48]);	/* racunanje grupe ulaza src sa S kutijom table, izlaz je dest */	void computeGroup(bit *dest,bit *src,uint16 table);	/* permutacija P */	void computeP(bit input[32],bit output[32]);	/* generiranje podkljuceva */	void keySchedule();	/* konacna permutacija */	void computeIPInv(bit input[64],bit output[64]);	/* provjera da li je kljuc los */	bool isBadKey(const string& key);public:	/* kriptira block kljucem key, vraca kriptirani tekst */	virtual string encrypt(const string& block,const string& key);	/* dekriptira block kljucem key, vraca otvoreni tekst */	virtual string decrypt(const string& block,const string& key);	DES3r() {}};#endif

⌨️ 快捷键说明

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