📄 aes.cpp
字号:
return 7;
if (filesize==BufferSize)
{
for (int i=0;i<BufferSize/temp;i++)
{
memcpy(state,buffer+i*temp,temp);
result=aes.Encrypt((unsigned char*)state,blocksize,(unsigned char*)key,keysize);
if (result != 0)
return result;
memcpy(wrbuffer+i*temp,state,temp);
}//end for
filesize = fwrite(wrbuffer,1,BufferSize,fout);
if(ferror(fout) || filesize != BufferSize)
return 8;
filesize = 0;
}//end if
}while(!feof(fin)); //end of while(eof)
//final
switch(blocksize)
{
case 128:
padding = 16 - (filesize % 16);
break;
case 192:
padding = 24 - (filesize % 24);
break;
case 256:
padding = 32 - (filesize % 32);
break;
default:
return 2;
}//end switch
memset(buffer+filesize,padding,padding);
for (int j=0;j<(filesize+padding)/temp;j++)
{
memcpy(state,buffer+j*temp,temp);
result=aes.Encrypt((unsigned char*)state,blocksize,(unsigned char*)key,keysize);
if (result != 0)
return result;
memcpy(wrbuffer+j*temp,state,temp);
}//end for
fwrite(wrbuffer,1,filesize+padding,fout);
if (ferror(fout))
return 8;
fclose(fin);
fclose(fout);
return result;
}
int ECM_D(const char* inname, const char* outname,unsigned char* key, int keysize, int blocksize)
{
AES aes;
int result = 0;
int filesize = 0;
int padding = -1;
int temp = 0;
unsigned char buffer[BufferSize]={0};
unsigned char wrbuffer[BufferSize]={0};
unsigned char state[32]={0};
FILE *fin, *fout;
if ( (fin = fopen(inname, "rb")) == NULL)
return 4;
if ( (fout = fopen(outname, "wb")) == NULL)
return 5;
temp = blocksize / 8;
do
{
filesize = fread(buffer,1,BufferSize,fin);
if (ferror(fin))
return 7;
if (filesize==BufferSize)
{
for (int i=0;i<BufferSize/temp;i++)
{
memcpy(state,buffer+i*temp,temp);
result=aes.Decrypt((unsigned char*)state,blocksize,(unsigned char*)key,keysize);
if (result != 0)
return result;
memcpy(wrbuffer+i*temp,state,temp);
}//end for
if (feof(fin))
{
padding = wrbuffer[BufferSize-1];
if (padding < 0)
return 6;
else if(blocksize==128 && padding >16)
return 6;
else if(blocksize==192 && padding >24)
return 6;
else if(blocksize==256 && padding >32)
return 6;
fwrite(wrbuffer,1,BufferSize-padding,fout);
if(ferror(fout))
return 8;
//decrypt complete
filesize = 0;
return result;
}
else
{
filesize = fwrite(wrbuffer,1,BufferSize,fout);
if(ferror(fout) || filesize != BufferSize)
return 8;
}
}//end if (filesize == BufferSize)
}while(!feof(fin)); //end while
//final
if (filesize != 0)
{
for (int j=0;j<(filesize/temp);j++)
{
memcpy(state,buffer+j*temp,temp);
result=aes.Decrypt((unsigned char*)state,blocksize,(unsigned char*)key,keysize);
if (result != 0)
return result;
if(j==filesize/temp-1)
{
padding = state[temp-1];
if (padding < 0)
return 6;
else if(blocksize==128 && padding >16)
return 6;
else if(blocksize==192 && padding >24)
return 6;
else if(blocksize==256 && padding >32)
return 6;
if(temp != padding)
memcpy(wrbuffer+j*temp,state,temp-padding);
}
else
memcpy(wrbuffer+j*temp,state,temp);
}//end for
fwrite(wrbuffer,1,filesize-padding,fout);
if (ferror(fout))
return 8;
}//end if
fclose(fin);
fclose(fout);
return result;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -