aes.h

来自「实现AES 的加密与解密。用户可以自己给出明文」· C头文件 代码 · 共 43 行

H
43
字号
#pragma once

class AES
{
public:
	AES(void);
	~AES(void);
	Bit m_Key[4*Nk];//起始密钥
	Word m_KeyW[(EncryptionRounds+1)*Nb];//以字为单位存储扩展密钥
	Bit m_KeyB[(EncryptionRounds+1)*Nb/4][4][4];//以字节为单位存储扩展密钥
	Word m_Rcon[(EncryptionRounds+1)*Nb/Nk];//轮常数
	Bit SDataSource[16][16];//S盒数据源
	bool m_first;//起始轮变量
	int m_last;//结束轮变量
	Word m_InputW[4];//以字为单位存储输入变量
	Bit m_InputB[4][4];//以字节为单位存储输入变量
	Bit m_Current[4][4];//Square为单位存储当前变量
	Bit logTable[16][16];//对数表
	Bit InvLogTable[16][16];//反对数表
	Bit InvSDataSource[16][16];//反S盒数据源
	Word m_CodeW[4];//以字为单位存储存储密文
	Word m_ClearW[4];//存储明文
	Bit m_CodeB[4][4];//以字节为单位存储明文

	void KeyExpansion(Bit key[4*Nk], Word w[(EncryptionRounds+1)*Nb]);//扩展密钥
	void Encrypt(void);//加密算法
	void InvEncrypt(void);//解密算法
	Word RotWord(Word& w);//循环位移
	Bit SubBypes(Bit &b);//S盒置换
	Bit InvSubBypes(Bit &b);//反S盒置换
	Word SubWord(Word &w);//以字为单位S盒置换
	Word xor(Word x,Word y);//以字为单位抑或
	Bit xor(Bit x,Bit y);//以字节为单位抑或
	void xor(Bit bit1[4][4],Bit bit2[4][4]);//Square为单位抑或
	void WordToBit(const Word w,Bit bit[4]);//把字转换为字节
	void BitToWord(const Bit bit[4],Word& w);//字节转换为字
	void ShiftRows(Bit bit[4][4]);//行位移运算
	void InvShiftRows(Bit bit[4][4]);//反行位移运算
	Bit Ffmul(Bit bit1,Bit bit2);//乘法运算
	void MixColumns(Bit state[4][4]);//列混合运算
	void InvMixColumns(Bit state[4][4]);//反列混合运算
};

⌨️ 快捷键说明

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