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

📄 criptview.cpp

📁 有几种密码系统供选择,如RSA密码.能对单个文件进行加密,并且也能对单个文件进行解密
💻 CPP
字号:
// criptView.cpp : implementation of the CCriptView class
//

#include "stdafx.h"
#include "cript.h"

#include "criptDoc.h"
#include "criptView.h"
#include "substitute.h"
#include "setsystem.h"
#include "SetKey.h"
#include "Key_vige.h"
#include "DES.h"
#include "var.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CCriptView

IMPLEMENT_DYNCREATE(CCriptView, CView)

BEGIN_MESSAGE_MAP(CCriptView, CView)
	//{{AFX_MSG_MAP(CCriptView)
	ON_COMMAND(ID_TEST, OnTest)
	ON_COMMAND(ID_SETKEYM, OnSetkeym)
	ON_COMMAND(ID_DSF, OnDsf)
	ON_COMMAND(ID_ESF, OnEsf)
	ON_COMMAND(ID_VIGE, OnVige)
	ON_COMMAND(ID_MENUSetCaesaKey, OnSetCaesaKey)
	ON_COMMAND(ID_MENUSetVigenereKey, OnSetVigenereKey)
	ON_COMMAND(ID_MENUSetDESKey, OnSetDESKey)
	ON_COMMAND(ID_MENUSetRSAKey, OnSetRSAKey)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCriptView construction/destruction

CCriptView::CCriptView()
{
	// TODO: add construction code here
	m_key=73;
}

CCriptView::~CCriptView()
{
}

BOOL CCriptView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CCriptView drawing

void CCriptView::OnDraw(CDC* pDC)
{
	CCriptDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
}

/////////////////////////////////////////////////////////////////////////////
// CCriptView printing

BOOL CCriptView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CCriptView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CCriptView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CCriptView diagnostics

#ifdef _DEBUG
void CCriptView::AssertValid() const
{
	CView::AssertValid();
}

void CCriptView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CCriptDoc* CCriptView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CCriptDoc)));
	return (CCriptDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CCriptView message handlers

void CCriptView::OnTest() 
{
	CClientDC *pDC=new CClientDC(this);
//	pDC=new CClientDC(this);
	TEXTMETRIC ptm;
	pDC->GetOutputTextMetrics(&ptm);
	int x,y;
	long lh=ptm.tmHeight;
	CString s;

	char k[]="codecyc";
	char m[]= "abcdefghijklmnopqrstuvwxyz";
	char c[]= "012345678901234567890123456789";
	char m1[]="012345678901234567890123456789";
	x=0,y=0;
	s.Format("m = '%s'",m);
	pDC->TextOut(x,y,s);
	m2c_p(m,c,k,25);
	s.Format("c = '%s'",c);
	pDC->TextOut(x,y+=lh,s);
	c2m_p(c,m1,k,25);
	s.Format("m1 = '%s'",m1);
	pDC->TextOut(x,y+=lh,s);

/*	BYTE m,c,k;
	m='A'; k=32;
	m2c(m,c,k);
	x=0,y=0;
	s.Format("c = '%c'",c);
	pDC->TextOut(x,y,s);
	c2m(c,m,k);
	s.Format("m = '%c'",m);
	pDC->TextOut(x,y+=lh,s);

	int mi,ci;
	mi=543; k=32;
	m2c(mi,ci,k);
	s.Format("ci = '%d'",ci);
	pDC->TextOut(x,y+=lh,s);
	c2m(ci,mi,k);
	s.Format("mi = '%d'",mi);
	pDC->TextOut(x,y+=lh,s);
*/
	delete(pDC);
	
}

void CCriptView::OnSetkeym() 
{
	SetKey dlg;
	if(dlg.DoModal()==IDOK)
	{
	
	    m_key=dlg.m_key%256;
		Disply_V();
	}
}

void CCriptView::Disply_V()
{
	CClientDC *pDC=new CClientDC(this);
	TEXTMETRIC ptm;
	pDC->GetOutputTextMetrics(&ptm);
	int x,y;
	long lh=ptm.tmHeight;
	CString s;
	s.Format("key=%u",m_key);
	x=0,y=0;
	pDC->TextOut(x,y,s);
//	pDC->TextOut(x,y+=lh,m_key_vige);
//	s.Format("key_vige length=%u",m_key_vige.GetLength());
//	pDC->TextOut(x,y+=lh,s);
//	char *ks=m_key_vige.GetBuffer(m_key_vige.GetLength());
//	s.Format("key=%send",ks);
//	pDC->TextOut(x,y+=lh,s);

	delete(pDC);

}

void CCriptView::OnDsf() 
{
	switch(criptType)
	{
		case CAESA:		DSFCaesar();break;
		case VIGENERE:	DSFvige();break;
		case DES:		DSF_DES();break;
		case DES_3:		DSF_3DES();break;
		case RSA:		DSF_RSA();break;
	}
	MessageBox("解密完毕");
}

void CCriptView::OnEsf() 
{
	switch(criptType)
	{
		case CAESA:		ESFCaesar();break;
		case VIGENERE:	ESFvige();break;
		case DES:		ESF_DES();break;
		case DES_3:		ESF_3DES();break;
		case RSA:		ESF_RSA();break;
	}
	MessageBox("加密完毕");
}

void CCriptView::ESFCaesar()
{
	openfile(1);
	unsigned int nfm=fm.GetLength(),k;
	BYTE m,c;
	for(k=0;k<nfm;k++)
	{
		fm.Read(&m,1);
		m2c(m,c,m_key);
		fc.Write(&c,1);
	}
	closefiles();
}

void CCriptView::DSFCaesar()
{
	openfile(0);
	unsigned int nfm=fm.GetLength(),k;
	BYTE m,c;
	for(k=0;k<nfm;k++)
	{
		fm.Read(&m,1);
		c2m(m,c,m_key);
		fc.Write(&c,1);
	}
	closefiles();
}

void CCriptView::ESFvige()
{
	openfile(1);
	unsigned int nfm=fm.GetLength(),k,nkey;
	char *ks=m_key_vige.GetBuffer(nkey=m_key_vige.GetLength());
	BYTE *m,*c;
	m=(BYTE *)malloc(nkey+1);
	c=(BYTE *)malloc(nkey+1);
	for(k=0;k<nfm;k+=nkey)
	{
		if(k+nkey<nfm)
			fm.Read(m,nkey);
		else
			fm.Read(m,nfm-k);
		m2c_vige(m,c,(BYTE *)ks);
		fc.Write(c,nkey);
	}
	closefiles();
}

void CCriptView::DSFvige()
{
	openfile(0);
	unsigned int nfm=fm.GetLength(),k,nkey;
	char *ks=m_key_vige.GetBuffer(nkey=m_key_vige.GetLength());
	BYTE *m,*c;
	m=(BYTE *)malloc(nkey+1);
	c=(BYTE *)malloc(nkey+1);
	for(k=0;k<nfm;k+=nkey)
	{
		if(k+nkey<nfm)
			fm.Read(m,nkey);
		else
			fm.Read(m,nfm-k);
		c2m_vige(m,c,(BYTE *)ks);
		fc.Write(c,nkey);
	}
	closefiles();
}

void CCriptView::OnVige() 
{
	Key_vige dlg;
	if(dlg.DoModal()==IDOK)
	{
	
	    m_key_vige=dlg.m_key;
		Disply_V();
	}

}

void CCriptView::m2c_pp(char m[], char c[], char k[], int nm)
{
	int n,j,js,nk;
	int i,*korder;
	char kmin,kmax;
	nk=0;
	for(i=0;k[i]!='\0';i++)nk++;//计算密钥长度
	//计算密钥顺序表korder
	korder=(int*)malloc((nk)*sizeof(int));
	for(j=0;j<nk;j++)*(korder+j)=-1;
	kmax=k[0];
	for(i=1;i<nk;i++)
			if(k[i]>kmax) kmax=k[i];
	n=1;
	for(j=0;j<nk;j++)
	{
		kmin=kmax;
		for(i=0;i<nk;i++)
			if(*(korder+i)==-1 && k[i]<=kmin) n=i,kmin=k[i];
		*(korder+n)=j;
	}

	//加密
	n=0;
	for(i=0;i<nk;i++)
	{
		for(j=0;j<nk;j++)
			if(*(korder+j)==i)js=j;
		for(j=js;j<nm;j+=nk)
		{
			c[n]=m[j];
			n++;
		}
	}
}

void CCriptView::c2m_pp(char m[], char c[], char k[], int nm)
{
	int n,i,j,js,nk;
	int *korder;
	char kmin,kmax;
	nk=0;
	for(i=0;k[i]!='\0';i++)nk++;//计算密钥长度
	//计算密钥顺序表korder
	korder=(int*)malloc((nk)*sizeof(int));
	for(j=0;j<nk;j++)*(korder+j)=-1;
	kmax=k[0];
	for(i=1;i<nk;i++)
			if(k[i]>kmax) kmax=k[i];
	n=1;
	for(j=0;j<nk;j++)
	{
		kmin=kmax;
		for(i=0;i<nk;i++)
			if(*(korder+i)==-1 && k[i]<=kmin) n=i,kmin=k[i];
		*(korder+n)=j;
	}

	//解密
	n=0;
	for(i=0;i<nk;i++)
	{
		for(j=0;j<nk;j++)
			if(*(korder+j)==i)js=j;
		for(j=js;j<nm;j+=nk)
		{
			c[j]=m[n];
			n++;
		}
	}
}

void CCriptView::OnSetCaesaKey() 
{
	SetKey dlg;
	if(dlg.DoModal()==IDOK)
	{
	
	    m_key=dlg.m_key%256;
//		Disply_V();
	}
	
}

void CCriptView::OnSetVigenereKey() 
{
	Key_vige dlg;
	if(dlg.DoModal()==IDOK)
	{
	
	    m_key_vige=dlg.m_key;
		Disply_V();
	}	
}



bool CCriptView::openfile(UINT opType)
{
	CFileException e;
	CFileDialog dlg(TRUE);
	if(opType)
		dlg.m_ofn.lpstrTitle="打开明文文件";
	else
		dlg.m_ofn.lpstrTitle="打开密文文件";
	if (dlg.DoModal() != IDOK) {
		return false;
	}
	if( !fm.Open( dlg.GetPathName(), CFile::modeRead, &e ) )
   {
	#ifdef _DEBUG
	   afxDump << "File could not be opened " << e.m_cause << "\n";
	#endif
	return false;
   }
	CFileDialog dlg1(FALSE);
	if(opType)
		dlg1.m_ofn.lpstrTitle="加密后保存为";
	else
		dlg1.m_ofn.lpstrTitle="解密后保存为";
	if (dlg1.DoModal() != IDOK) 
	{
		fm.Close();
		return false;
	}
	if( !fc.Open( dlg1.GetPathName(), CFile::modeCreate | CFile::modeWrite, &e ) )
   {
	#ifdef _DEBUG
	   afxDump << "File could not be opened " << e.m_cause << "\n";
	#endif
	fm.Close();
	return false;
   }
	return true;
}

void CCriptView::closefiles()
{
	fm.Close();
	fc.Close();
}

void CCriptView::DSF_DES()
{
	openfile(1);
	unsigned int nfm=fm.GetLength(),keylen=16,ndata;
	char key[16]={19};
	char *In,*Out;
	In=(char *)malloc(8);
	Out=(char *)malloc(8);

	for(long i=0,j=nfm>>3; i<j; ++i)
	{
		ndata=fm.Read(In,8);
		DES_Act(Out, In, ndata, key, sizeof(key), DECRYPT);
		fc.Write(Out,8);
	} 
	closefiles();

}

void CCriptView::ESF_3DES()
{

}

void CCriptView::DSF_3DES()
{

}

void CCriptView::ESF_RSA()
{

}

void CCriptView::DSF_RSA()
{

}

void CCriptView::OnSetDESKey() 
{
	Key_vige dlg;
	if(dlg.DoModal()==IDOK)
	{
	
	    m_key_DES=dlg.m_key;
//		m_key_DES=exkey(m_key_DES,16);
	}	
	
}

void CCriptView::OnSetRSAKey() 
{
	// TODO: Add your command handler code here
	
}

void CCriptView::ESF_DES()
{
	openfile(1);
	unsigned int nfm=fm.GetLength(),keylen=16,ndata;
	char key[16]={19};
	char *In,*Out;
	In=(char *)malloc(8);
	Out=(char *)malloc(8);

	for(long i=0,j=nfm>>3; i<j; ++i)
	{
		ndata=fm.Read(In,8);
		DES_Act(Out, In, ndata, key, sizeof(key), ENCRYPT);
		fc.Write(Out,8);
	} 
	closefiles();
}

⌨️ 快捷键说明

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