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

📄 subkeyworddlg.cpp

📁 1、对于凯撒密文
💻 CPP
字号:
// SubKeywordDlg.cpp : implementation file
//

#include "stdafx.h"
#include "030300816.h"
#include "SubKeywordDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CSubKeywordDlg dialog


CSubKeywordDlg::CSubKeywordDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CSubKeywordDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSubKeywordDlg)
	m_cipherString = _T("");
	m_plainString = _T("");
	m_key = _T("a");
	m_at = _T("a");
	m_suba = _T("a");
	m_subb = _T("b");
	m_subc = _T("c");
	m_subd = _T("d");
	m_sube = _T("e");
	m_subf = _T("f");
	m_subg = _T("g");
	m_subh = _T("h");
	m_subi = _T("i");
	m_subj = _T("j");
	m_subk = _T("k");
	m_subl = _T("l");
	m_subm = _T("m");
	m_subn = _T("n");
	m_subo = _T("o");
	m_subp = _T("p");
	m_subq = _T("q");
	m_subr = _T("r");
	m_subs = _T("s");
	m_subt = _T("t");
	m_subu = _T("u");
	m_subv = _T("v");
	m_subw = _T("w");
	m_subx = _T("x");
	m_suby = _T("y");
	m_subz = _T("z");
	//}}AFX_DATA_INIT
}


void CSubKeywordDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSubKeywordDlg)
	DDX_Text(pDX, IDC_AT, m_at);
	DDV_MaxChars(pDX, m_at, 1);
	DDX_Text(pDX, IDC_CIPHER_STRING, m_cipherString);
	DDX_Text(pDX, IDC_KEY, m_key);
	DDX_Text(pDX, IDC_PLAIN_STRING, m_plainString);
	DDX_Text(pDX, IDC_SUBA, m_suba);
	DDX_Text(pDX, IDC_SUBB, m_subb);
	DDX_Text(pDX, IDC_SUBC, m_subc);
	DDX_Text(pDX, IDC_SUBD, m_subd);
	DDX_Text(pDX, IDC_SUBE, m_sube);
	DDX_Text(pDX, IDC_SUBF, m_subf);
	DDX_Text(pDX, IDC_SUBG, m_subg);
	DDX_Text(pDX, IDC_SUBH, m_subh);
	DDX_Text(pDX, IDC_SUBI, m_subi);
	DDX_Text(pDX, IDC_SUBJ, m_subj);
	DDX_Text(pDX, IDC_SUBK, m_subk);
	DDX_Text(pDX, IDC_SUBL, m_subl);
	DDX_Text(pDX, IDC_SUBM, m_subm);
	DDX_Text(pDX, IDC_SUBN, m_subn);
	DDX_Text(pDX, IDC_SUBO, m_subo);
	DDX_Text(pDX, IDC_SUBP, m_subp);
	DDX_Text(pDX, IDC_SUBQ, m_subq);
	DDX_Text(pDX, IDC_SUBR, m_subr);
	DDX_Text(pDX, IDC_SUBS, m_subs);
	DDX_Text(pDX, IDC_SUBT, m_subt);
	DDX_Text(pDX, IDC_SUBU, m_subu);
	DDX_Text(pDX, IDC_SUBV, m_subv);
	DDX_Text(pDX, IDC_SUBW, m_subw);
	DDX_Text(pDX, IDC_SUBX, m_subx);
	DDX_Text(pDX, IDC_SUBY, m_suby);
	DDX_Text(pDX, IDC_SUBZ, m_subz);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CSubKeywordDlg, CDialog)
	//{{AFX_MSG_MAP(CSubKeywordDlg)
	ON_BN_CLICKED(IDC_RESET, OnReset)
	ON_BN_CLICKED(IDC_SETKEY, OnSetkey)
	ON_BN_CLICKED(IDC_ENCIPHER, OnEncipher)
	ON_BN_CLICKED(IDC_DECIPHER, OnDecipher)
	ON_WM_SETCURSOR()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSubKeywordDlg message handlers

void CSubKeywordDlg::OnReset() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
	m_plainString = "";
	m_cipherString = "";
	UpdateData(false);
}

void CSubKeywordDlg::OnSetkey() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
	for ( int j = 0 ; j < 200 ; j ++ ) crib[j] = 0;
	if(!CheckKeyBox())return;
	CString m_tempKey = m_key;
	kk=_T("");
	char temp;
	m_tempKey.MakeLower();
	int length = m_tempKey.GetLength();
	for ( int i = 0 ; i < length ; i ++ )
	{
		temp = m_tempKey.GetAt(i);
		if ( !crib[temp] )
		{
			crib[temp] = 1;
			kk += temp;
		}
	}
	ShowSubstitution(m_at,kk);
	ShowKey();
	UpdateData(false);
}

bool CSubKeywordDlg::CheckKeyBox()
{
	if (m_key == "" || m_at == "")
	{
		AfxMessageBox("请准确设置密钥。");
		return false;
	}
	else
		return true;
}

void CSubKeywordDlg::ShowSubstitution(CString m_at, CString &kk)
{
	int length = kk.GetLength();
	CString tempAt = m_at;
	tempAt.MakeLower();
	char at = tempAt.GetAt(0);
	char anotherAt = at;
	bool tempSub[200];
	for ( int k = 0 ; k < 200 ; k ++ ) tempSub[k] = 0;
	for ( k = 'a' ; k <= 'z' ; k ++ ) tempSub[k] = 1;
	for ( int i = 0 ; i < length ; i ++ , at ++)
	{
		sub[(at-'a')%26+'a'] = kk.GetAt(i);
		tempSub[kk.GetAt(i)] = 0;
	}
	for ( i = 0 ; i < (26-length) ; i ++ )
	{
		k = 'a';
		while(tempSub[k]==0) k++;
		tempSub[k] = 0;
		sub[(anotherAt+length-'a'+i+26)%26+'a'] = k;
	}
	key = _T("");
	for ( i = 'a';i<='z';i++)
		key += sub[i];
}

void CSubKeywordDlg::ShowKey()
{
	m_suba = sub['a'];
	m_subb = sub['b'];
	m_subc = sub['c'];
	m_subd = sub['d'];
	m_sube = sub['e'];
	m_subf = sub['f'];
	m_subg = sub['g'];
	m_subh = sub['h'];
	m_subi = sub['i'];
	m_subj = sub['j'];
	m_subk = sub['k'];
	m_subl = sub['l'];
	m_subm = sub['m'];
	m_subn = sub['n'];
	m_subo = sub['o'];
	m_subp = sub['p'];
	m_subq = sub['q'];
	m_subr = sub['r'];
	m_subs = sub['s'];
	m_subt = sub['t'];
	m_subu = sub['u'];
	m_subv = sub['v'];
	m_subw = sub['w'];
	m_subx = sub['x'];
	m_suby = sub['y'];
	m_subz = sub['z'];
	UpdateData(false);
}

void CSubKeywordDlg::OnEncipher() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
	CKeyword keyword;
	keyword.m_plainString = m_plainString;
	keyword.m_key = key;
	keyword.Encipher();
//	m_plainString = "";
	m_cipherString = keyword.m_cipherString;
	UpdateData(FALSE);
}

void CSubKeywordDlg::OnDecipher() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
	CKeyword keyword;
	keyword.m_cipherString = m_cipherString;
	keyword.m_key = key;
	keyword.Decipher();
	m_plainString = keyword.m_plainString;
//	m_cipherString = "";
	UpdateData(FALSE);
}

BOOL CSubKeywordDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	m_hArrow = AfxGetApp()->LoadCursor(IDC_MYARROW);
	m_hHand = AfxGetApp()->LoadCursor(IDC_MYHAND);
	m_hBeam = AfxGetApp()->LoadCursor(IDC_MYBEAM);
	m_hPen = AfxGetApp()->LoadCursor(IDC_MYPEN);
	m_hMove = AfxGetApp()->LoadCursor(IDC_MYMOVE);
	for ( int i = 0 ; i < 200 ; i ++ ) crib[i] = 0;
	for ( i = 0 ; i < 200 ; i ++ ) sub[i] = 0;
	for ( i = 'a' ; i <= 'z' ; i ++ ) sub[i] = i;
	for ( i = 0 ; i < 26 ; i ++ ) key += ('a'+i);
	ShowKey();
	m_wndTaskbarNotifier->Show("欢迎进入关键字法加密系统!\r\n本系统利用给定的关键词以及单词的起始位置生成一个随机的对应关系,然后对明文进行加密!");
//	pSkin2->ApplySkin((long)m_hWnd);
	// CG: The following block was added by the ToolTips component.	{		// Create the ToolTip control.		m_tooltip.Create(this);		m_tooltip.Activate(TRUE);		m_tooltip.AddTool(GetDlgItem(IDC_ENCIPHER), "对明文进行加密");
		m_tooltip.AddTool(GetDlgItem(IDC_DECIPHER), "对密文进行解密");
		m_tooltip.AddTool(GetDlgItem(IDC_RESET), "清空明文密文");
		m_tooltip.AddTool(GetDlgItem(IDC_CIPHER_STRING), "请输入密文");
		m_tooltip.AddTool(GetDlgItem(IDC_PLAIN_STRING), "请输入明文");
		m_tooltip.AddTool(GetDlgItem(IDC_SETKEY), "点击根据关键字生成对应关系");
		m_tooltip.AddTool(GetDlgItem(IDC_KEY), "请输入关键字");
		m_tooltip.AddTool(GetDlgItem(IDC_AT), "请输入关键字开始位置");		// TODO: Use one of the following forms to add controls:		// m_tooltip.AddTool(GetDlgItem(IDC_<name>), <string-table-id>);		// m_tooltip.AddTool(GetDlgItem(IDC_<name>), "<text>");	}
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

BOOL CSubKeywordDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
{
	// TODO: Add your message handler code here and/or call default
	if ( pWnd == GetDlgItem(IDC_RESET) 
		|| pWnd == GetDlgItem(IDC_DECIPHER)
		|| pWnd == GetDlgItem(IDC_ENCIPHER)
		|| pWnd == GetDlgItem(IDC_SETKEY)
		)
		::SetCursor(m_hHand);
	else if ( pWnd == GetDlgItem(IDC_PLAIN_STRING)
		|| pWnd == GetDlgItem(IDC_CIPHER_STRING)
		|| pWnd == GetDlgItem(IDC_AT)
		|| pWnd == GetDlgItem(IDC_KEY)
		)
		::SetCursor(m_hBeam);
	else if ( nHitTest == HTCAPTION )
		::SetCursor(m_hMove);
	else
		::SetCursor(m_hArrow);
	return true;
	//return CDialog::OnSetCursor(pWnd, nHitTest, message);
}

BOOL CSubKeywordDlg::PreTranslateMessage(MSG* pMsg)
{
	// CG: The following block was added by the ToolTips component.	{		// Let the ToolTip process this message.		m_tooltip.RelayEvent(pMsg);	}	return CDialog::PreTranslateMessage(pMsg);	// CG: This was added by the ToolTips component.
}

⌨️ 快捷键说明

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