⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aes.cpp

📁 單輸入系統模糊溫度控制器的實作.c語言程式
💻 CPP
📖 第 1 页 / 共 4 页
字号:
			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 + -