Enviado em 30/04/2021 - 10:19h
Boa noite pessoal,class AES_Key
{
private:
// Containers:
unsigned char Key[16];
std::vector<std::vector<unsigned char>> RoundKeys{};
// Auxiliary Functions:
void RotWord(std::vector<unsigned char>& word) {
unsigned char temp{word.at(0)};
word.at(0) = word.at(3);
word.at(3) = temp;
for (unsigned short i{0}; i <= 1; i++) {
temp = word.at(i);
word.at(i) = word.at(i+1);
word.at(i+1) = temp;
}
}
void SubWord(std::vector<unsigned char>& word) {
for (unsigned short i{0}; i < 4; i++)
word.at(i) = AES_SubTable[word.at(i)];
}
static unsigned short Rcon(unsigned short Round) {
Round /= 4;
switch (Round) {
case 1: return 0x1;
case 2: return 0x2;
case 3: return 0x4;
case 4: return 0x8;
case 5: return 0x10;
case 6: return 0x20;
case 7: return 0x40;
case 8: return 0x80;
case 9: return 0x1B;
case 10: return 0x36;
default: throw 0;
}
}
// Functions:
void ExpandKey() {
// Generate the first 4 words:
std::vector<std::vector<unsigned char>> words{};
for (unsigned short i{0}; i < 4; i++) {
words.push_back(std::vector<unsigned char>{});
words.back().push_back(this->Key[4*i]);
words.back().push_back(this->Key[4*i+1]);
words.back().push_back(this->Key[4*i+2]);
words.back().push_back(this->Key[4*i+3]);
}
// Generate the next 40 words:
std::vector<unsigned char>* temp{nullptr};
for (unsigned short i{4}; i < 44; i++) {
temp = &words.at(i-1);
if ((i % 4) == 0) {
RotWord(*temp);
SubWord(*temp);
temp->at(0) ^= Rcon(i);
}
words.push_back(std::vector<unsigned char>{});
std::vector<unsigned char>* xorword{&words[i-4]};
for (unsigned short j{0}; j < 4; j++) {
words.back().push_back(xorword->at(j) ^ temp->at(j));
}
}
// Construct Round Keys:
}
public:
// Constructors:
AES_Key(const char* key) { ///// Padding not implemented yet /////
for (unsigned short i{0}; i < 16; i++)
this->Key[i] = (unsigned char)key[i];
this->ExpandKey();
}
// Getters:
unsigned char* InitialKey() {return this->Key;}
std::vector<unsigned char> RoundKey(unsigned short Round) {return this->RoundKeys[Round];}
};
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (9)