16,472
社区成员
发帖
与我相关
我的任务
分享
Aes(int keySize, unsigned char* keyBytes);
void Cipher(unsigned char* input, unsigned char* output); // encipher 16-bit input
void Aes::Cipher(unsigned char* input, unsigned char* output)
{
memset(&State[0][0],0,16);
for(int i=0;i<4*Nb;i++)
{
State[i%4][i/4]=input[i];
}
AddRoundKey(0);
for (int round = 1; round <= (Nr - 1); round++)
{
SubBytes();
ShiftRows();
MixColumns();
AddRoundKey(round);
} // main round loop
SubBytes();
ShiftRows();
AddRoundKey(Nr);
// output = state
for (i = 0; i < (4 * Nb); i++)
{
output[i] = State[i % 4][ i / 4];
}
}
FILE* finput;
FILE* foutput;
finput=fopen((LPCTSTR)EnDe_filename,"rb");
if(!finput)
{
AfxMessageBox("Open file failed");
return;
}
fseek(finput,0,SEEK_END);
long lFileLen=ftell(finput);
fseek(finput,0,SEEK_SET);
long blocknum=lFileLen/16;
long leftnum=lFileLen%16;
str_EnFileName=EnDe_filename+".en";
foutput=fopen((LPCTSTR)str_EnFileName,"wb");
if(!foutput)
{
AfxMessageBox("Open file failed");
fclose(finput);
return;
} unsigned char inBuff[25],ouBuff[25];
Aes aes(16,(unsigned char*)"\x0\x1\x2\x3\x4\x5\x6\x7\x8\x9\xa\xb\xc\xd\xe\xf");
for(long i=0;i<blocknum;i++)
{
fread(inBuff,1,16,finput);
aes.Cipher(inBuff,ouBuff);
fwrite(ouBuff,1,16,foutput);
}
if(leftnum)
{
memset(inBuff,0,16);
fread(inBuff,1,leftnum,finput);
aes.Cipher(inBuff,ouBuff);
fwrite(ouBuff,1,16,foutput);
}
fclose(finput);
fclose(foutput);