我正在自我学习成为一名密码学家,并且作为一个项目,我正在分析Rijndael AES标准。我的问题是关于密码功能的内部位置。我正在实现aes256,到目前为止,我知道我需要14个回合,这些回合也应在for循环逻辑中完成回合密钥的生成。私有函数是空的,因为我正在尝试首先降低抽象概念。我不是要求您为我编写代码。我要寻找的是确认所有函数和for循环都在正确的位置。
进一步澄清我对此的立场;我的印象是mixColumns使用矩阵乘法,shiftRows使用Galois Fields,而addRoundKey使用XOR。子字节显然是一种替换密码。如果错误,请对这些声明进行更正。
#include <math.h>
#include <string.h>
class Rijndael{
private:
void AddRoundKey(){
}
void SubBytes(){
}
void ShiftRows(){
}
void MixColumns(){
}
/*snipped inverse functions*/
public:
//This function is where I request your attention
void encrypt(){
AddRoundKey();
for(int i=0; i<14; i++){
SubBytes();
ShiftRows();
MixColumns();
AddRoundKey();
}
SubBytes();
ShiftRows();
MixColumns();
AddRoundKey();
}
/*snipped decrypt function*/
}aes;