📄 dlgrsaencrypt.cpp
字号:
// DlgRSAEncrypt.cpp : implementation file
//
#include "stdafx.h"
#include "cryptology.h"
#include "DlgRSAEncrypt.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
char RSA_HexMap[] = "0123456789abcdef";
/////////////////////////////////////////////////////////////////////////////
// CDlgRSAEncrypt dialog
CDlgRSAEncrypt::CDlgRSAEncrypt(CWnd* pParent /*=NULL*/)
: CDialog(CDlgRSAEncrypt::IDD, pParent)
{
//{{AFX_DATA_INIT(CDlgRSAEncrypt)
m_strMsg = _T("");
m_strCrypt = _T("");
m_strDecrypt= _T("");
//}}AFX_DATA_INIT
m_bEncrypt = false;
m_bDecrypt = true;
}
void CDlgRSAEncrypt::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDlgRSAEncrypt)
DDX_Text(pDX, IDC_EDIT_MESSAGE, m_strMsg);
DDV_MaxChars(pDX, m_strMsg, 50000);
DDX_Text(pDX, IDC_EDIT_DECRYPT, m_strDecrypt);
DDV_MaxChars(pDX, m_strDecrypt, 50000);
DDX_Text(pDX, IDC_EDIT_CRYPTOGRAPH, m_strCrypt);
DDV_MaxChars(pDX, m_strCrypt, 50000);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDlgRSAEncrypt, CDialog)
//{{AFX_MSG_MAP(CDlgRSAEncrypt)
ON_BN_CLICKED(IDC_BUTTON_DECRYPT, OnButtonDecrypt)
ON_BN_CLICKED(IDC_BUTTON_ENCRYPT, OnButtonEncrypt)
ON_EN_CHANGE(IDC_EDIT_MESSAGE, OnChangeEditMessage)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDlgRSAEncrypt message handlers
void CDlgRSAEncrypt::OnChangeEditMessage()
{
// TODO: Add your control notification handler code here
m_bEncrypt = false;
}
BOOL CDlgRSAEncrypt::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
char ch;
FILE *fp = fopen("Gettysburg.txt","r");
while( (ch=fgetc(fp))!=EOF )
{
if( ch=='\n' )
m_strMsg += '\r';
m_strMsg += ch;
}
fclose(fp);
UpdateData(FALSE);
return TRUE;
}
void CDlgRSAEncrypt::OnButtonEncrypt()
{
// TODO: Add your control notification handler code here
if( m_bEncrypt==true )
return;
UpdateData(TRUE);
TransMsgToBlocks( );
for( int i=0; i<m_iBlocks; i++ )
m_RSA.Encrypt( m_pBlocks[i] );
TransBlocksToCrypt( );
m_bEncrypt = true;
m_bDecrypt = false;
UpdateData(FALSE);
}
void CDlgRSAEncrypt::OnButtonDecrypt( )
{
// TODO: Add your control notification handler code here
if( m_bDecrypt==true )
return;
UpdateData(TRUE);
for( int i=0; i<m_iBlocks; i++ )
m_RSA.Decrypt( m_pBlocks[i] );
TransBlocksToDecrypt( );
m_bDecrypt=true;
UpdateData(FALSE);
}
////////////////////////////////// RSA /////////////////////////////////////
void CDlgRSAEncrypt::TransMsgToBlocks( )
{
int i, j, l, t;
l = m_strMsg.GetLength( );
m_iBlocks = l/RSA_BLOCK_BYTE_SIZE;
for( i=0; i<m_iBlocks; i++ )
{
t = i*RSA_BLOCK_BYTE_SIZE;
for( j=0; j<RSA_BLOCK_BYTE_SIZE; j++ )
m_pBlocks[i][j] = m_strMsg[t+j];
m_pBlocks[i][RSA_BLOCK_BYTE_SIZE] = 0;
}
if( m_iBlocks*RSA_BLOCK_BYTE_SIZE < l )
{
t = (m_iBlocks)*RSA_BLOCK_BYTE_SIZE;
for( j=0; j<RSA_BLOCK_BYTE_SIZE; j++ )
{
if( t+j >= l )
m_pBlocks[m_iBlocks][j] = 0;
else
m_pBlocks[m_iBlocks][j] = m_strMsg[t+j];
}
m_pBlocks[m_iBlocks][RSA_BLOCK_BYTE_SIZE] = 0;
m_iBlocks++;
}
}
void CDlgRSAEncrypt::TransBlocksToCrypt( )
{
int i, t;
m_strCrypt.Empty( );
t = m_iBlocks*RSA_BLOCK_BYTE_SIZE;
for( i=0; i<t; i++ )
{
m_strCrypt += RSA_HexMap[(*((BYTE*)m_pBlocks+i))>>4];
m_strCrypt += RSA_HexMap[(*((BYTE*)m_pBlocks+i))&0xf];
m_strCrypt += ' ';
}
}
void CDlgRSAEncrypt::TransBlocksToDecrypt( )
{
int i, j;
m_strDecrypt.Empty( );
for( i=0; i<m_iBlocks; i++ )
{
for( j=0; j<RSA_BLOCK_BYTE_SIZE; j++ )
m_strDecrypt += m_pBlocks[i][j];
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -