AES的C 實現 128位金鑰

2021-04-07 14:01:14 字數 3827 閱讀 5190

//  寫了乙個aes的c++實現,僅支援128位金鑰, 寫得匆忙,不夠規範,僅供參考。

//    aes.h

#ifndef aes_h_

#define aes_h_

#include

#include

using namespace std;

class aes

;void aes::encryptionprocess()

finalround();

initialciphertext();

}void aes::decryptionprocess()

addroundkey(0);

initialplaintext();

}void aes::round(const int& round)

void aes::invround(const int& round)

void aes::finalround()

void aes::invfinalround()

void aes::keyexpansion()

,  ,,,

,,,,

,,

};       

for(int i = 0; i < 16; ++i)

for(int i = 0; i < 4; ++i)

}for(int roundindex = 1; roundindex < n_round; ++roundindex)

;rotword[0] = roundkey[roundindex - 1][3];

rotword[1] = roundkey[roundindex - 1][7];

rotword[2] = roundkey[roundindex - 1][11];

rotword[3] = roundkey[roundindex - 1][15];

std::swap(rotword[0], rotword[1]);

std::swap(rotword[1], rotword[2]);

std::swap(rotword[2], rotword[3]);       

for(int i = 0; i < 4; ++i)

for(int j = 1; j < 4; ++j)}}

}void aes::addroundkey(const int& round)

}void aes::subbytes()

}void aes::invsubbytes()

}void aes::shiftrows()

void aes::invshiftrows()

void aes::mixcolumns(),,

,};

const byte* temp = gfmultplybyte**atrix((byte*)matrix, state);

for(int i = 0; i < 16; ++i)

delete temp;

}void aes::invmixcolumns(),,

, };

const byte* temp = gfmultplybyte**atrix((byte*)matrix, state);

for(int i = 0; i < 16; ++i)

delete temp;

}void aes::buildsbox()

,/*1*/  ,

/*2*/  ,

/*3*/  ,

/*4*/  ,

/*5*/  ,

/*6*/  ,

/*7*/  ,

/*8*/  ,

/*9*/  ,

/*a*/  ,

/*b*/  ,

/*c*/  ,

/*d*/  ,

/*e*/  ,

/*f*/ 

};for(int i = 0; i < 16; ++i)}}

void aes::buildinvsbox()

,/*1*/  ,

/*2*/  ,

/*3*/  ,

/*4*/  ,

/*5*/  ,

/*6*/  ,

/*7*/  ,

/*8*/  ,

/*9*/  ,

/*a*/  ,

/*b*/  ,

/*c*/  ,

/*d*/  ,

/*e*/  ,

/*f*/ 

};for(int i = 0; i < 16; ++i)}}

void aes::initialstate(const byte* text)}}

void aes::initialciphertext()}}

void aes::initialplaintext()}}

aes::byte aes::gfmultplybyte(const byte& left, const byte& right)

else

}byte result = 0x00;

for(int i = 0; i < 8; ++i)

}return result;

}const aes::byte* aes::gfmultplybyte**atrix(const byte* left, const byte* right)}}

return result;

}aes::aes()

const aes::byte* aes::cipher(const byte* text, const byte* key, const int& keysize)

for(int i = 0; i < keysize; ++i)

encryptionprocess();

return ciphertext;

}const aes::byte* aes::invcipher(const byte* text, const byte* key, const int& keysize)

for(int i = 0; i < keysize; ++i)

decryptionprocess();

return plaintext;

}#endif /* aes_h_ */

//    main.cpp

#include

#include

#include

#include "aes.h"

using namespace std;

int main(int argc, char* argv)

ifstream is(argv[3], ios::in | ios::binary);

if(!is)

ifstream ks(argv[4], ios::in | ios::binary);

if(!ks)

aes aes;

const unsigned char *key = new unsigned char[16];

ks.read((char*)key, 16);

ofstream os(argv[2], ios::out | ios::binary);

if(strcmp(argv[1], "-e") == 0 || strcmp(argv[1], "-e") == 0)

}if(strcmp(argv[1], "-d") == 0 || strcmp(argv[1], "-d") == 0)

delete ciphertext;

}delete key;

is.close();

ks.close();

os.close();

return 0;

}

aes 128位加密 解密

coding utf 8 import sys from crypto.cipher import aes from crypto import random from binascii import b2a hex,a2b hex class prpcrypt def init self,key ...

PHP實現的AES 128位加密演算法示例

加密演算法一般分為兩種 對稱加密演算法和非對稱加密演算法。對稱加密 對稱加密演算法是訊息傳送者和接收者使用同乙個密匙,傳送者使用密匙加密了檔案,接收者使用同樣的密匙解密,獲取資訊。常見的對稱加密演算法有 des aes 3des.對稱加密演算法的特點有 速度快,加密前後檔案大小變化不大,但是密匙的保...

AES金鑰編排Python實現

附上我的部落格鏈結 四元君 對想出aes的前輩大寫的佩服,光是寫了金鑰編排我就寫了一下午 這裡把aes講述一下,再把 過程總結一下 aes加密演算法涉及4種操作 位元組替代 subbytes 行移位 shiftrows 列混淆 mixcolumns 和輪金鑰加 addroundkey 我們這裡提及的...