📄 crypt.txt
字号:
void CEncryAndDecryptDlg::OnExit()
{
CDialog::EndDialog(IDOK);
}
void CEncryAndDecryptDlg::OnHelp()
{
CAboutDlg dlg;
dlg.DoModal();
}
//显示File模式面板
void CEncryAndDecryptDlg::OnRadfile()
{
//将字符串面板屏蔽
ShowStringGroup(FALSE);
MoveFileGroup();
//将文件面板所有控件显示
ShowFileGroup(TRUE);
//重新设置面板显示的位置
CRect oRect, oRectDlg;
CWnd* poWnd = GetDlgItem(IDC_EDITHEX1);
poWnd->GetWindowRect(&oRect);
GetWindowRect(&oRectDlg);
SetWindowPos(NULL, 0, 0, oRectDlg.Width(), oRect.bottom-oRectDlg.top+15, SWP_NOMOVE|SWP_NOZORDER);
m_iMode = FILE;
}
//显示String模式面板
void CEncryAndDecryptDlg::OnRadstr()
{
//将文件面板屏蔽
ShowFileGroup(FALSE);
MoveStringGroup();
//将字符串面板所有控件显示
ShowStringGroup(TRUE);
//重新设置字符串面板显示的位置
CRect oRect, oRectDlg;
CWnd* poWnd = GetDlgItem(IDC_EDITHEX2);
poWnd->GetWindowRect(&oRect);
GetWindowRect(&oRectDlg);
SetWindowPos(NULL, 0, 0, oRectDlg.Width(), oRect.bottom-oRectDlg.top+15, SWP_NOMOVE|SWP_NOZORDER);
m_iMode = STRING;
}
//显示File模式所对应的面板上的所有控件
void CEncryAndDecryptDlg::ShowFileGroup(BOOL bShow)
{
CWnd* poWnd;
//显示各个控件
poWnd = GetDlgItem(IDC_LBLFILE);
poWnd->ShowWindow(bShow ? SW_SHOW : SW_HIDE);
poWnd = GetDlgItem(IDC_EDITFILE);
poWnd->ShowWindow(bShow ? SW_SHOW : SW_HIDE);
poWnd = GetDlgItem(IDC_BTNFILE);
poWnd->ShowWindow(bShow ? SW_SHOW : SW_HIDE);
poWnd = GetDlgItem(IDC_STATICBMPARROW1);
poWnd->ShowWindow(bShow ? SW_SHOW : SW_HIDE);
poWnd = GetDlgItem(IDC_BTNFILEDIGEST);
poWnd->ShowWindow(bShow ? SW_SHOW : SW_HIDE);
poWnd = GetDlgItem(IDC_LBLSTR1);
poWnd->ShowWindow(bShow ? SW_SHOW : SW_HIDE);
poWnd = GetDlgItem(IDC_EDITSTR1);
poWnd->ShowWindow(bShow ? SW_SHOW : SW_HIDE);
poWnd = GetDlgItem(IDC_BTNSAVEAS);
poWnd->ShowWindow(bShow ? SW_SHOW : SW_HIDE);
poWnd = GetDlgItem(IDC_LBLHEX1);
poWnd->ShowWindow(bShow ? SW_SHOW : SW_HIDE);
poWnd = GetDlgItem(IDC_EDITHEX1);
poWnd->ShowWindow(bShow ? SW_SHOW : SW_HIDE);
}
8)、主要的窗体类:
// EncryAndDecryptDlg.h : header file
//
#if !defined(AFX_ENCRYANDDECRYPTDLG_H__DF1A4BD7_CD11_4F04_9D56_71AB1AA682C6__INCLUDED_)
#define AFX_ENCRYANDDECRYPTDLG_H__DF1A4BD7_CD11_4F04_9D56_71AB1AA682C6__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "TransparentBitmap.h"
#include "EditHex.h"
#include "EditReadOnly.h"
#include "EditSelect.h"
#include "MD5.h"
#include "DES.h"
#include "Rsa.h"
/////////////////////////////////////////////////////////////////////////////
// CEncryAndDecryptDlg dialog
class CEncryAndDecryptDlg : public CDialog
{
// Construction
public:
CEncryAndDecryptDlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DATA(CEncryAndDecryptDlg)
enum { IDD = IDD_ENCRYANDDECRYPT_DIALOG };
// NOTE: the ClassWizard will add data members here
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CEncryAndDecryptDlg)
public:
virtual BOOL PreTranslateMessage(MSG* pMsg);
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
HICON m_hIcon;
void ShowFileGroup(BOOL bShow);
void ShowStringGroup(BOOL bShow);
void MoveFileGroup();
void MoveStringGroup();
BOOL ToPrimeNumber(CString szTemp);
BOOL IsPrime(int x);
// Generated message map functions
//{{AFX_MSG(CEncryAndDecryptDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnExit();
afx_msg void OnHelp();
afx_msg void OnRadstr();
afx_msg void OnRadfile();
afx_msg void OnBtnfile();
afx_msg void OnBtnfiledigest();
afx_msg void OnBtnsaveas();
afx_msg void OnKickIdle();
afx_msg void OnSelchangeCombomethods();
afx_msg void OnRadalpha();
afx_msg void OnRadhex();
afx_msg void OnRaddecrypt();
afx_msg void OnRadencrypt();
afx_msg void OnBtnstringdigest();
//}}AFX_MSG
afx_msg void OnUpdateBtnFileEncry(CCmdUI* pCmdUI);
afx_msg void OnUpdateBtnStrEncry(CCmdUI* pCmdUI);
afx_msg void OnUpdateBtnSaveAs(CCmdUI* pCmdUI);
afx_msg void OnUpdateEditDES(CCmdUI* pCmdUI);
afx_msg void OnUpdateEditP(CCmdUI* pCmdUI);
afx_msg void OnUpdateEditQ(CCmdUI* pCmdUI);
DECLARE_MESSAGE_MAP()
private:
int m_iRSAn;
int m_iRSAe;
enum {FILE = 0, STRING = 1};//对两种模式的定义
enum {DES = 0, MD5 = 1,RSA = 2};//对使用的加密算法进行定义
enum {ENCRYPT = 0, DECRYPT = 1};//对加密和解密进行定义
int m_iMode;//模式变量
int m_iMethod;//算法变量
int m_iAction;//加密还是解密
//颜色变量
COLORREF m_oPlainFrg, m_oPlainBg, m_oPlainBg1;
COLORREF m_oDigFrg, m_oDigBg, m_oDigBg1;
CMenu m_oMenu;//菜单类,用于添加退出菜单
CToolTipCtrl m_oToolTipCtrl;//提示信息类,主要是起到提示功能
CTransparentBitmap m_oTransparentBitmap1,m_oTransparentBitmap2;//用于位图处理,使位图透明
CBitmap m_oBMP1,m_oBMP2;//位图变量
CEditSelect m_oEditDES;//IDC_EDITDES
CEditSelect m_oEditP;//IDC_EDITP
CEditSelect m_oEditQ;//IDC_EDITQ
CEditSelect m_oEditFile; //IDC_EDITFILE
CEditReadonly m_oEditStr1; //IDC_EDITSTR1
CEditReadonly m_oEditHex1; //IDC_EDITHEX1
CEditSelect m_oEditAlpha; //IDC_EDITALPHA
CEditHex m_oEditHex; //IDC_EDITHEX
CEditReadonly m_oEditStr2; //IDC_EDITSTR2
CEditReadonly m_oEditHex2; //IDC_EDITHEX2
//算法类
CMD5 m_oMD5;
CDES m_oDES;
CRSA m_oRSA;
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_ENCRYANDDECRYPTDLG_H__DF1A4BD7_CD11_4F04_9D56_71AB1AA682C6__INCLUDED_)
// EncryAndDecryptDlg.cpp : implementation file
//
#include "stdafx.h"
#include "EncryAndDecrypt.h"
#include "EncryAndDecryptDlg.h"
#include <shlwapi.h>
#include <cmath>
//动态加载库文件
#pragma comment(lib,"shlwapi.lib")
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CEncryAndDecryptDlg dialog
//使用构造函数对控件进行初始化
CEncryAndDecryptDlg::CEncryAndDecryptDlg(CWnd* pParent /*=NULL*/)
: CDialog(CEncryAndDecryptDlg::IDD, pParent),m_iAction(ENCRYPT),m_iMode(FILE),m_iMethod(DES),
m_oPlainFrg(RGB(0,0,200)), m_oPlainBg(RGB(255,200,200)), m_oPlainBg1(RGB(100,200,100)),
m_oDigFrg(RGB(0,130,0)), m_oDigBg(RGB(200,200,255)), m_oDigBg1(RGB(150,150,200)),
m_oEditDES(RGB(20,20,100), RGB(150,200,200)),m_oEditP(RGB(20,20,100), RGB(150,200,200)),m_oEditQ(RGB(20,20,100), RGB(150,200,200)),
m_oEditFile(m_oPlainFrg, m_oPlainBg), m_oEditStr1(m_oDigFrg, m_oDigBg),
m_oEditHex1(m_oDigFrg, m_oDigBg),m_oEditAlpha(m_oPlainFrg, m_oPlainBg),
m_oEditHex(m_oPlainFrg, m_oPlainBg1),m_oEditStr2(m_oDigFrg, m_oDigBg),
m_oEditHex2(m_oDigFrg, m_oDigBg),m_iRSAe(0),m_iRSAn(0)
{
//{{AFX_DATA_INIT(CEncryAndDecryptDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_TITLE);//显示小图标
}
void CEncryAndDecryptDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CEncryAndDecryptDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CEncryAndDecryptDlg, CDialog)
//{{AFX_MSG_MAP(CEncryAndDecryptDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_COMMAND(IDM_EXIT, OnExit)
ON_COMMAND(IDM_HELP, OnHelp)
ON_BN_CLICKED(IDC_RADSTR, OnRadstr)
ON_BN_CLICKED(IDC_RADFILE, OnRadfile)
ON_BN_CLICKED(IDC_BTNFILE, OnBtnfile)
ON_BN_CLICKED(IDC_BTNFILEDIGEST, OnBtnfiledigest)
ON_BN_CLICKED(IDC_BTNSAVEAS, OnBtnsaveas)
ON_MESSAGE_VOID(WM_KICKIDLE, OnKickIdle)
ON_CBN_SELCHANGE(IDC_COMBO_METHODS, OnSelchangeCombomethods)
ON_BN_CLICKED(IDC_RADALPHA, OnRadalpha)
ON_BN_CLICKED(IDC_RADHEX, OnRadhex)
ON_BN_CLICKED(IDC_RADDECRYPT, OnRaddecrypt)
ON_BN_CLICKED(IDC_RADENCRYPT, OnRadencrypt)
ON_UPDATE_COMMAND_UI(IDC_BTNFILEDIGEST, OnUpdateBtnFileEncry)
ON_UPDATE_COMMAND_UI(IDC_BTNSTRINGDIGEST, OnUpdateBtnStrEncry)
ON_UPDATE_COMMAND_UI(IDC_BTNSAVEAS, OnUpdateBtnSaveAs)
ON_UPDATE_COMMAND_UI(IDC_EDITDES, OnUpdateEditDES)
ON_UPDATE_COMMAND_UI(IDC_EDITP, OnUpdateEditP)
ON_UPDATE_COMMAND_UI(IDC_EDITQ, OnUpdateEditQ)
ON_BN_CLICKED(IDC_BTNSTRINGDIGEST, OnBtnstringdigest)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CEncryAndDecryptDlg message handlers //////////////////////////////////////////////////////////////////////////
/// 此处开始对C0,D0处理
for(i=0; i<8; i++)
{
memset(tempByte, 0, 8);
//szKey为输入的密钥
char ch = szKey.GetAt(i);
if(ch&0x80)
{
AfxMessageBox("含有中文字符");
return "FALSESTRING";
}
for(int j=0; j<8; j++)
{
tempByte[j]=ch%2;
ch/=2;
}
for(j=7; j>=0; j--)
{
Key[i*8+7-j]=tempByte[j];
}
}
for(i=0; i<28; i++)
{
KeyC0[i]=Key[PC1_Table[i]-1]; /// 获得c0共28位
KeyD0[i]=Key[PC1_Table[i+28]-1]; /// 获得d0共28位
}
//////////////////////////////////////////////////////////////////////////
/// 此处开始16迭代算法
isDecrypt=false;
for(i=1; i<=16; i++)
{
Transform(i);
}
//////////////////////////////////////////////////////////////////////////
// 最后一次生成的L16与R16调换位置装入密文字符串里
int miwen[64];
memset(miwen, 0, 64);
// 逆初始置换,真它MOTHER的麻烦!
int mitmp[64];
memset(mitmp, 0, 64);
for(i=0; i<32; i++)
{
mitmp[i]=R0[i];
mitmp[32+i]=L0[i];
//交换L0,R0的值
L0[i]=mitmp[i];
R0[i]=mitmp[i+32];
}
for(i=0; i<64; i++)
{
miwen[i]=mitmp[IPR_Table[i]-1];
}
CString m_new="",str;
for(i=0; i<8; i++)
{
int tmp=0;
tmp+=miwen[8*i];
for(int j=1; j<8; j++)
{
tmp*=2;
tmp+=miwen[i*8+j];
}
str.Format("%c", tmp);
m_new+=str;
}
return m_new;
}
//进行解密
CString CDES::Decrypt()
{
//重新开始16次迭代算法
isDecrypt=true;
int i;
for(i=16; i>=1; i--)
{
Transform(i);
}
//////////////////////////////////////////////////////////////////////////
// 最后一次生成的L16<->R16调换位置
int minwen[64];
memset(minwen, 0, 64);
// 逆初始置换
int mintmp[64];
memset(mintmp, 0, 64);
for(i=0; i<32; i++)
{
mintmp[i]=R0[i];
mintmp[32+i]=L0[i];
}
for(i=0; i<64; i++)
{
minwen[i]=mintmp[IPR_Table[i]-1];
}
//////////////////////////////////////////////////////////////////////////
// 将密文ASCII码放入编辑框里面去
CString str,strResult = "";
for(i=0; i<8; i++)
{
int tmp=0;
tmp+=minwen[8*i];
for(int j=1; j<8; j++)
{
tmp*=2;
tmp+=minwen[i*8+j];
}
//将整形变量转化为CString也可以使用itoa来解决
str.Format("%c", tmp);
strResult += str;
}
return strResult;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -