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

📄 truecolorto8bitview.cpp

📁 这个是基于混沌的DES加密算法应用与图象加密
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	int k = lo-1;
	int l= 1;
	int *row = &k;
	int *colomn = &l;
   
	val[0][0]=0.7;
	for (i=0;i<time+lo-1;i++)
		val[0][i+1]=4*val[0][i]*(1-val[0][i]);
	for (j=0;j<(space-67);j++)
		val[j+1][0]=3.9*val[j][0]*(1-val[j][0]);
	
	for(n=1;n<time+lo;n++)
		for(i=1;i<lo;i++)
		{
			val[i][n]=(1-ep)*fun(val[i][n-1])+ep*fun(val[i-1][n-1]);
		}

	for (n=1;n<(time-lo)/2;n++)                   //???????????error
	{
		for(i=lo-1;i<(space-67);i++)
		{
			val[i][n]=(1-ep)*fun(val[i][n-1])+ep*fun(val[i-1][n-1]);
		}
	}
	

	
	//DES encryption data
    
//	for (int n=0; n<10; n++)
		
//	UINT32 key= int (x*1000000000);
	
//	unsigned char * pkey= (unsigned char *)&key;
	unsigned char * despdata=pdata;
//	memset(pkey,1,4);
//	pkey;
	//UINT32 * pdencryt;
    ///while(pdata!=NULL)
    des_enc(&dc,despdata,blocks,key,val,time,space,row,colomn);
	
		//pkey-=4;
	

			//将得到的数据写进文件中
			if(file.Open("temp.bmp",CFile::modeCreate|CFile::modeWrite,NULL))
			{
			//	bf.bfOffBits=bf.bfOffBits+1024;
			//	bf.bfSize=bf.bfOffBits+nsize;
				file.Write(&bf,sizeof(BITMAPFILEHEADER));
				file.Write(binfoin,sizeof(BITMAPINFOHEADER));//+256*sizeof(RGBQUAD)+10);
				file.Write(pdata,nsize);
				file.Close();
			}
	
	free(binfoin);
//	free(binfoout);
	free(pdata);
	//free(pdata8);
	HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,"temp.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION);
//	CDC tempDC;
	if(hBitmap==NULL) return;
	bitmap.DeleteObject();
	bitmap.Attach(hBitmap);
	bitmap.GetObject(sizeof(BITMAP),&bm);
	bShow=true;
	Invalidate();
}

//decryption
void CTruecolorto8bitView::OnDESDecrypt() 
{
	des_ctx dc;
	// TODO: Add your command handler code here
		// TODO: Add your command handler code here
	//加载位图文件
	BITMAPFILEHEADER bf;
	BITMAPINFO *binfoin;//,*binfoout;
	//创建两个信息头
	CFile file;
	if(!file.Open(str,CFile::modeRead,NULL)) return;

	binfoin=(BITMAPINFO *)malloc(sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD)+10);
//	binfoout=(BITMAPINFO *)malloc(sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD)+10);
	file.Read(&bf,sizeof(BITMAPFILEHEADER));
	file.Read(binfoin,sizeof(BITMAPINFOHEADER));
	int nline=((binfoin->bmiHeader.biWidth* binfoin->bmiHeader.biBitCount+31)/8) /4*4;
	int nsize=nline*(binfoin->bmiHeader.biHeight);
//	int nline8=((binfoin->bmiHeader.biWidth* 8+31)/8) /4*4;
//	int nsize8=nline8*(binfoin->bmiHeader.biHeight);

	int space=binfoin->bmiHeader.biHeight;
	int time=nline;

	unsigned char *pdata;//,*pdata8;
	//为源数据开辟缓冲区
	pdata=(unsigned char *)malloc(nsize+nline+10);//注意这里必须申请一块大一点的空间,不然会益处
	//为目标数据开辟缓冲区
//	pdata8=(unsigned char *)malloc(nsize8+10);
	file.Read(pdata,nsize);
	file.Close();
	int blocks=nsize/8;
	unsigned char key[8];
	
	int i, j, n;
	int lo=80;
	double ep=0.8;
	int k = lo-1;
	int l= 1;
	int *row = &k;
	int *colomn = &l;
   
	val[0][0]=0.7;
	for (i=0;i<time+lo-1;i++)
		val[0][i+1]=4*val[0][i]*(1-val[0][i]);
	for (j=0;j<(space-67);j++)
		val[j+1][0]=3.9*val[j][0]*(1-val[j][0]);
	
	for(n=1;n<time+lo;n++)
		for(i=1;i<lo;i++)
		{
			val[i][n]=(1-ep)*fun(val[i][n-1])+ep*fun(val[i-1][n-1]);
		}

	for (n=1;n<(time-lo)/2;n++)                   //???????????error
	{
		for(i=lo-1;i<(space-67);i++)
		{
			val[i][n]=(1-ep)*fun(val[i][n-1])+ep*fun(val[i-1][n-1]);
		}
	}
	
	//DES encryption data
    
//	for (int n=0; n<10; n++)
		
//	UINT32 key= int (x*1000000000);
	
//	unsigned char * pkey= (unsigned char *)&key;
	unsigned char * despdata=pdata;
//	memset(pkey,1,4);
//	pkey;
	//UINT32 * pdencryt;
    ///while(pdata!=NULL)
    des_dec(&dc,despdata,blocks,key,val,time,space,row,colomn);
	
		//pkey-=4;
	

			//将得到的数据写进文件中
			if(file.Open("temp.bmp",CFile::modeCreate|CFile::modeWrite,NULL))
			{
			//	bf.bfOffBits=bf.bfOffBits+1024;
			//	bf.bfSize=bf.bfOffBits+nsize;
				file.Write(&bf,sizeof(BITMAPFILEHEADER));
				file.Write(binfoin,sizeof(BITMAPINFOHEADER));//+256*sizeof(RGBQUAD)+10);
				file.Write(pdata,nsize);
				file.Close();
			}
	
	free(binfoin);
//	free(binfoout);
	free(pdata);
	//free(pdata8);
	HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,"temp.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION);
//	CDC tempDC;
	if(hBitmap==NULL) return;
	bitmap.DeleteObject();
	bitmap.Attach(hBitmap);
	bitmap.GetObject(sizeof(BITMAP),&bm);
	bShow=true;
	Invalidate();
}



void CTruecolorto8bitView::OnOEncrypt() 
{
	// TODO: Add your command handler code here
		//加载位图文件
	BITMAPFILEHEADER bf;
	BITMAPINFO *binfoin;//,*binfoout;
	//创建两个信息头
	CFile file;
	if(!file.Open(str,CFile::modeRead,NULL)) return;

	binfoin=(BITMAPINFO *)malloc(sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD)+10);
//	binfoout=(BITMAPINFO *)malloc(sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD)+10);
	file.Read(&bf,sizeof(BITMAPFILEHEADER));
	file.Read(binfoin,sizeof(BITMAPINFOHEADER));
	int nline=((binfoin->bmiHeader.biWidth* binfoin->bmiHeader.biBitCount+31)/8) /4*4;
	TRACE("Width=%d,Height=%d,BitCount=%d\n",binfoin->bmiHeader.biWidth,binfoin->bmiHeader.biHeight,binfoin->bmiHeader.biBitCount);  //Width=640,BitCount=24
	int nsize=nline*(binfoin->bmiHeader.biHeight);
	TRACE("the size of image in bytes=%d",nsize);

	//OCOML
	int space=binfoin->bmiHeader.biHeight;
	int time=nline;
	TRACE("space=%d,time=%d\n",space,time);

	unsigned char *pdata;//,*pdata8;
	//为源数据开辟缓冲区
	pdata=(unsigned char *)malloc(nsize+nline+10);//注意这里必须申请一块大一点的空间,不然会益处
	//为目标数据开辟缓冲区
//	pdata8=(unsigned char *)malloc(nsize8+10);
	file.Read(pdata,nsize);
	file.Close();

	//ocoml origin lattice
	int i, j, n;
	int lo=80;
	double ep=0.8;
   
	val[0][0]=0.7;
	for (i=0;i<time+lo-1;i++)
		val[0][i+1]=4*val[0][i]*(1-val[0][i]);
	for (j=0;j<(space-67);j++)
		val[j+1][0]=3.9*val[j][0]*(1-val[j][0]);
	
	for(n=1;n<time+lo;n++)
		for(i=1;i<lo;i++)
		{
			val[i][n]=(1-ep)*fun(val[i][n-1])+ep*fun(val[i-1][n-1]);
		}
	// data to be encrypted
	unsigned char * despdata= (unsigned char *) pdata;
//	UINT32 * despdata=(UINT32 *)pdata;

	for (n=1;n<(time-lo)/2;n++)                   //???????????error
	{
		for(i=lo-1;i<(space-67);i++)
		{
			val[i][n]=(1-ep)*fun(val[i][n-1])+ep*fun(val[i-1][n-1]);
			UINT32 key= int (val[i][n]*1000000000);
			unsigned char * pkey= (unsigned char *)&key;
			if(despdata==NULL)
					break;
	
			for ( j=0;j<3;j++)
			{
				if(despdata==NULL)
					break;
				(*despdata)^=(*pkey);
				pkey++;
				despdata++;		
			}
			/*(*despdata)^=key;
			despdata++;	*/	
		}
			//pkey-=4;
		if(despdata==NULL)
					break;
	//	TRACE("i=%d,n=%d \n",i,n);
	}

			//将得到的数据写进文件中
			if(file.Open("temp.bmp",CFile::modeCreate|CFile::modeWrite,NULL))
			{
			//	bf.bfOffBits=bf.bfOffBits+1024;
			//	bf.bfSize=bf.bfOffBits+nsize;
				file.Write(&bf,sizeof(BITMAPFILEHEADER));
				file.Write(binfoin,sizeof(BITMAPINFOHEADER));//+256*sizeof(RGBQUAD)+10);
				file.Write(pdata,nsize);
				file.Close();
			}
	
	free(binfoin);
//	free(binfoout);
	free(pdata);
	//free(pdata8);
	HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,"temp.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION);
//	CDC tempDC;
	if(hBitmap==NULL) return;
	bitmap.DeleteObject();
	bitmap.Attach(hBitmap);
	bitmap.GetObject(sizeof(BITMAP),&bm);
	bShow=true;
	Invalidate();
}

void CTruecolorto8bitView::OnCOEncrypt() 
{
	// TODO: Add your command handler code here
		// TODO: Add your command handler code here
	int N=4;
		//加载位图文件
	BITMAPFILEHEADER bf;
	BITMAPINFO *binfoin;//,*binfoout;
	//创建两个信息头
	CFile file;
	if(!file.Open(str,CFile::modeRead,NULL)) return;

	binfoin=(BITMAPINFO *)malloc(sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD)+10);
//	binfoout=(BITMAPINFO *)malloc(sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD)+10);
	file.Read(&bf,sizeof(BITMAPFILEHEADER));
	file.Read(binfoin,sizeof(BITMAPINFOHEADER));
//	int nline=((binfoin->bmiHeader.biWidth* binfoin->bmiHeader.biBitCount+31)/8) /4*4;
	int nline=binfoin->bmiHeader.biWidth*3;
	TRACE("Width=%d,Height=%d,BitCount=%d\n",binfoin->bmiHeader.biWidth,binfoin->bmiHeader.biHeight,binfoin->bmiHeader.biBitCount);  //Width=640,BitCount=24
	int nsize=binfoin->bmiHeader.biSizeImage;
	TRACE("the size of image in bytes=%d",nsize);

	//OCOML
	int space=binfoin->bmiHeader.biHeight;
	int time=binfoin->bmiHeader.biWidth;
	TRACE("space=%d,time=%d\n",space,time);

	unsigned char *pdata;//,*pdata8;
	//为源数据开辟缓冲区
	pdata=(unsigned char *)malloc(nsize+nline+10);//注意这里必须申请一块大一点的空间,不然会益处
	//为目标数据开辟缓冲区
//	pdata8=(unsigned char *)malloc(nsize8+10);
	file.Read(pdata,nsize);
	file.Close();

	//ocoml origin lattice
	int i, j, n, k;
	int lo=80;
	double ep=0.8;
   
	val[0][0]=0.7;
	for (i=0;i<time+lo-1;i++)
		val[0][i+1]=4*val[0][i]*(1-val[0][i]);
	for (j=0;j<space;j++)
		val[j+1][0]=3.9*val[j][0]*(1-val[j][0]);
	
	for(n=1;n<time+lo;n++)
		for(i=1;i<space;i++)
		{
			val[i][n]=(1-ep)*fun(val[i][n-1])+ep*fun(val[i-1][n-1]);
		}
	// data to be encrypted
	unsigned char * despdata= (unsigned char *) pdata;
//	UINT32 * despdata=(UINT32 *)pdata;
	char modul[3];

	for(i=1;i<=space+1;i++)
	{
		for (n=1+lo;n<1+lo+time/N;n++)     //?????  divide by N
		{
			val[i][n]=(1-ep)*fun(val[i][n-1])+ep*fun(val[i-1][n-1]);
			UINT32 key= int (val[i][n]*1000000000);
			unsigned char * pkey= (unsigned char *)&key;
			if(despdata==NULL)
					break;
	
			for ( j=0;j<3;j++)
			{
				if(despdata==NULL)
					break;
				(*despdata)^=(*pkey);
				modul[j]=*despdata;
				pkey++;	
				despdata++;	
				if(despdata==NULL)
					break;
			}
			
			/*8*8 module full
			for (k=0;k<3;k++)
			{
				*despdata=*(despdata+8);
				despdata++;
			}
			despdata-=3; */
			for (k=0; k<N-1; k++)
			{
				for(j=0; j<3; j++)
				{
					*despdata=modul[j];
					despdata++;
				}
				if(despdata==NULL)
					break;
			}
		}
			//pkey-=4;
		if(despdata==NULL)
					break;
	//	TRACE("i=%d,n=%d \n",i,n);
	}

			//将得到的数据写进文件中
			if(file.Open("temp.bmp",CFile::modeCreate|CFile::modeWrite,NULL))
			{
	
			//	binfoin->bmiHeader.biHeight/=8;
			//	binfoin->bmiHeader.biWidth/=8;
				file.Write(&bf,sizeof(BITMAPFILEHEADER));
				file.Write(binfoin,sizeof(BITMAPINFOHEADER));//+256*sizeof(RGBQUAD)+10);
			//	file.Write(pdata,24*80*60);
				file.Write(pdata,nsize);
				file.Close();
			}
	
	free(binfoin);
//	free(binfoout);
	free(pdata);
	//free(pdata8);
	HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,"temp.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION);
//	CDC tempDC;
	if(hBitmap==NULL) return;
	bitmap.DeleteObject();
	bitmap.Attach(hBitmap);
	bitmap.GetObject(sizeof(BITMAP),&bm);
	bShow=true;
	Invalidate();   
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -