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

📄 dlgrsaencrypt.cpp

📁 详细的AESRSASHA1实现原理
💻 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 + -