// 寫了乙個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 我們這裡提及的...