aes1.h

来自「这是一个关于AES加密的算法类库」· C头文件 代码 · 共 58 行

H
58
字号
#define BYTE unsigned char
#define DWORD long unsigned int
#define WORD short unsigned int

class Caes
{
//for test 
public:
	int Nk,Nb,Nr;

	BYTE key[32];  //32=4*Nk(Nk=4,6,8)'s max
	DWORD w[60]; //the round key's max  60=Nb*(Nr+1)'s max (Nb=4,Nr=10,12,14)

//in GF(2^8), add(),muply(),div()
	BYTE add(BYTE x, BYTE y);
	WORD add(WORD x, WORD y);
	BYTE multiply(BYTE x, BYTE y);
	WORD multiply(WORD x, WORD y);
	BYTE div(BYTE x, BYTE y);
	WORD div(WORD x, WORD y);
	
	
// extended Euclid's algorithm, return one byte's multiplitive inverse
	void Update(WORD *un, WORD *vn, WORD q);
	void eEuclid(BYTE *u);

// subByte and inverse subByte for one byte
	void subByte(BYTE *u);
	void invSubByte(BYTE *u);

// subDword() is a subByte for one Dword
	void subDword(DWORD *u);

	void rotDword(DWORD *u);
	DWORD Rcon[15];
	void KeyExpansion(); 

// used for Encipher()
	BYTE row[8];//8= max of Nb(4 6 8), the array row[] used for temporary storage
	BYTE column[4];//for mixcolumns() 
	void shiftRows(BYTE *u);
	void invShiftRows(BYTE *u);
	void mixColumns(BYTE *u);
	void invMixColumns(BYTE *u);
	void addRoundKey(BYTE *u , DWORD *ex);


public:
	Caes(int Nk,int Nb, BYTE *inkey);
	// Caes() is just for test
	Caes();

	void Encipher(BYTE *data);
	void Decipher(BYTE *data);



};

⌨️ 快捷键说明

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