?? criptview.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 + -