📄 rc4.cpp
字号:
// RC4.cpp : implementation file
//
#include "stdafx.h"
#include "cryptology.h"
#include "RC4.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CString R;
/////////////////////////////////////////////////////////////////////////////
// RC4 property page
IMPLEMENT_DYNCREATE(RC4, CPropertyPage)
RC4::RC4() : CPropertyPage(RC4::IDD)
{
//{{AFX_DATA_INIT(RC4)
m_ciphertext = _T("");
m_key = _T("");
m_plaintext = _T("");
m_word = _T("");
//}}AFX_DATA_INIT
}
RC4::~RC4()
{
}
void RC4::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(RC4)
DDX_Text(pDX, IDC_CIPHERTEXT, m_ciphertext);
DDX_Text(pDX, IDC_KEY, m_key);
DDX_Text(pDX, IDC_PLAINTEXT, m_plaintext);
DDX_Text(pDX, IDC_YUANWEN, m_word);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(RC4, CPropertyPage)
//{{AFX_MSG_MAP(RC4)
ON_BN_CLICKED(IDC_ENCRY, OnEncry)
ON_BN_CLICKED(IDC_DECRY, OnDecry)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// RC4 message handlers
void RC4::OnEncry()
{
UpdateData ( true ) ;
m_ciphertext="";
int S[260],T[260];
int i,j=0,kenlen;
int a,n,t,l=0;
char k;
kenlen=strlen ( m_key);
if(kenlen>256)
{
AfxMessageBox("Please input the key from 1 to 256 bytes!");
return;
}
a=strlen ( m_plaintext);
for(i=0;i<=255;i++)
{
S[i]=i;
T[i]=m_key[i%kenlen];
}
for(i=0;i<=255;i++)
{
j=(j+S[i]+T[i])%256;
n=S[i];
S[i]=S[j];
S[j]=n;
}
i=0;
j=0;
while(l<a)
{
i=(i+1)%256;
j=(j+S[i])%256;
n=S[i];
S[i]=S[j];
S[j]=n;
t=(S[i]+S[j])%256;
k=S[t];
R.Format("%c",( k^m_plaintext[l])) ;
m_ciphertext+=R;
l++;
}
UpdateData ( false ) ;
if(MessageBox("是否保存密文?",NULL,MB_OKCANCEL)==IDOK)
{
SaveFile();
}
}
void RC4::OnDecry()
{
UpdateData ( true ) ;
m_word="";
int S[260],T[260];
int i,j,kenlen;
int a,n,t,l=0;
char k;
kenlen=strlen ( m_key);
if(kenlen>256)
{
AfxMessageBox("Please input the key from 1 to 256 bytes!");
return;
}
a=strlen ( m_ciphertext);
for(i=0;i<=255;i++)
{
S[i]=i;
T[i]=m_key[i%kenlen];
}
j=0;
for(i=0;i<=255;i++)
{
j=(j+S[i]+T[i])%256;
n=S[i];
S[i]=S[j];
S[j]=n;
}
i=0;
j=0;
while(l<a)
{
i=(i+1)%256;
j=(j+S[i])%256;
n=S[i];
S[i]=S[j];
S[j]=n;
t=(S[i]+S[j])%256;
k=S[t];
R.Format("%c",( k^m_ciphertext[l])) ;
m_word+=R;
l++;
}
UpdateData ( false ) ;
}
void RC4::SaveFile()
{
CFileDialog dlg(false);
if(dlg.DoModal()==IDOK)
{
m_filename=dlg.GetPathName();
int len=m_filename.GetLength();
char *filename=new char[len];
filename=m_filename.GetBuffer(len);
m_file.Open(filename,CFile::modeWrite |CFile::modeCreate);
len=m_ciphertext.GetLength();
char *buf=new char[len];
buf=m_ciphertext.GetBuffer(len);
m_file.Write(buf,len);
m_file.Close();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -