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

📄 usbevppage.cpp

📁 基本实现了数字证书的制作、SSL安全通讯、加解密操作等功能
💻 CPP
字号:
// UsbEvpPage.cpp : implementation file
//

#include "stdafx.h"
#include "UsbKey.h"
#include "UsbEvpPage.h"

#include "..\evp.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CUsbEvpPage property page

IMPLEMENT_DYNCREATE(CUsbEvpPage, CPropertyPage)

CUsbEvpPage::CUsbEvpPage() : CPropertyPage(CUsbEvpPage::IDD)
{
	//{{AFX_DATA_INIT(CUsbEvpPage)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	m_per=0;
}

CUsbEvpPage::~CUsbEvpPage()
{
}

void CUsbEvpPage::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CUsbEvpPage)
	DDX_Control(pDX, IDC_PROGRESS, m_Progress);
	DDX_Control(pDX, IDC_LIST_EVP, m_List);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CUsbEvpPage, CPropertyPage)
	//{{AFX_MSG_MAP(CUsbEvpPage)
	ON_BN_CLICKED(IDC_BSOUT, OnBsout)
	ON_BN_CLICKED(IDC_BSIN, OnBsin)
	ON_BN_CLICKED(IDC_BENC, OnBenc)
	ON_BN_CLICKED(IDC_BDEC, OnBdec)
	ON_BN_CLICKED(IDC_BSEAL, OnBseal)
	ON_BN_CLICKED(IDC_BOPENSEAL, OnBopenseal)
	ON_BN_CLICKED(IDC_BDIGEST, OnBdigest)
	ON_BN_CLICKED(IDC_BSIGN, OnBsign)
	ON_BN_CLICKED(IDC_BVSIGN, OnBvsign)
	ON_BN_CLICKED(IDC_BRSACERT, OnBrsacert)
	ON_BN_CLICKED(IDC_BRSAKEY, OnBrsakey)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CUsbEvpPage message handlers
BOOL CUsbEvpPage::OnInitDialog() 
{
	CPropertyPage::OnInitDialog();
	
	// TODO: Add extra initialization here
	SetDlgItemText(IDC_COMBO_CRYPT,"idea-cbc");
	SetDlgItemText(IDC_COMBO_DIGEST,"sha1");
	m_Progress.SetRange(0,100);
	m_Progress.SetPos(0);

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CUsbEvpPage::OnBsout() 
{
	// TODO: Add your control notification handler code here
	CFileDialog dlgOpen(true,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
	"所有文件(*.*)|*.*||",NULL);
	dlgOpen.m_ofn.lpstrTitle="选择文件";//标题条
	if(dlgOpen.DoModal()!=IDOK) return;
	SetDlgItemText(IDC_EDIT_INFILE,dlgOpen.GetPathName());

}

void CUsbEvpPage::OnBsin() 
{
	// TODO: Add your control notification handler code here
	CFileDialog dlgOpen(true,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
		"所有文件(*.*)|*.*||",NULL);
	dlgOpen.m_ofn.lpstrTitle="选择保存文件";//标题条
	if(dlgOpen.DoModal()!=IDOK) return;
	SetDlgItemText(IDC_EDIT_OUTFILE,dlgOpen.GetPathName());
	
}

void CUsbEvpPage::OnBenc() //对称加密
{
	// TODO: Add your control notification handler code here
	CString cpname,filein,fileout,pwd("11111111");
	char outMsg[100]="";
	GetDlgItemText(IDC_COMBO_CRYPT,cpname);
	GetDlgItemText(IDC_EDIT_INFILE,filein);
	GetDlgItemText(IDC_EDIT_OUTFILE,fileout);
	m_Progress.SetPos(0);

	if(!Crypt(cpname.GetBuffer(0),filein.GetBuffer(0),fileout.GetBuffer(0),
			pwd.GetBuffer(0),1,outMsg,DrawProg))
		m_List.AddMsg(outMsg,M_ERROR);
	else
		m_List.AddMsg("加密文件成功");		
}

void CUsbEvpPage::OnBdec() //对称解密
{
	// TODO: Add your control notification handler code here
	CString cpname,filein,fileout,pwd("11111111");
	char outMsg[100]="";
	GetDlgItemText(IDC_COMBO_CRYPT,cpname);
	m_Progress.SetPos(0);
	GetDlgItemText(IDC_EDIT_INFILE,filein);
	GetDlgItemText(IDC_EDIT_OUTFILE,fileout);
	if(!Crypt(cpname.GetBuffer(0),filein.GetBuffer(0),fileout.GetBuffer(0),
			pwd.GetBuffer(0),0,outMsg,DrawProg))
		m_List.AddMsg(outMsg,M_ERROR);
	else
		m_List.AddMsg("解密文件成功");
	
}


void CUsbEvpPage::OnBseal() //数字信封
{
	// TODO: Add your control notification handler code here
	CString cpname,filein,fileout;
	char outMsg[100]="";
	GetDlgItemText(IDC_COMBO_CRYPT,cpname);
	GetDlgItemText(IDC_EDIT_INFILE,filein);
	GetDlgItemText(IDC_EDIT_OUTFILE,fileout);
	m_Progress.SetPos(0);
	/*得到公钥*/
	HRSRC hRsrc=FindResource(NULL,MAKEINTRESOURCE(IDR_ROOT_CERT),"CERT");
	DWORD lenCert = SizeofResource(NULL, hRsrc); 
	HGLOBAL hgCert=LoadResource(NULL,hRsrc);
	LPSTR lpCert=(LPSTR)LockResource(hgCert);

	if(!Seal(lpCert,lenCert,cpname.GetBuffer(0),filein.GetBuffer(0),
			fileout.GetBuffer(0),outMsg,DrawProg))
		m_List.AddMsg(outMsg,M_ERROR);
	else
		m_List.AddMsg("封装文件成功");
}

void CUsbEvpPage::OnBopenseal() //打开数字信封
{
	// TODO: Add your control notification handler code here
	CString cpname,filein,fileout;
	char outMsg[100]="";
	GetDlgItemText(IDC_COMBO_CRYPT,cpname);
	GetDlgItemText(IDC_EDIT_INFILE,filein);
	GetDlgItemText(IDC_EDIT_OUTFILE,fileout);
	m_Progress.SetPos(0);
	/*私钥*/
	HRSRC hRsrc=FindResource(NULL,MAKEINTRESOURCE(IDR_ROOT_KEY),"CERT");
	DWORD lenKey = SizeofResource(NULL, hRsrc); 
	HGLOBAL hgKey=LoadResource(NULL,hRsrc);
	LPSTR lpKey=(LPSTR)LockResource(hgKey);

	if(!OpenSeal(lpKey,lenKey,cpname.GetBuffer(0),filein.GetBuffer(0),
			fileout.GetBuffer(0),outMsg,DrawProg))
		m_List.AddMsg(outMsg,M_ERROR);
	else
		m_List.AddMsg("拆封文件成功");
	
}

void CUsbEvpPage::OnBdigest() //信息摘要
{
	// TODO: Add your control notification handler code here
	CString mdname,filein;
	char outMsg[100]="";
	unsigned char md_value[MAX_MD_SIZE]="";
	char buf[MAX_MD_SIZE*2]="";
	unsigned int md_len;
	GetDlgItemText(IDC_COMBO_DIGEST,mdname);
	GetDlgItemText(IDC_EDIT_INFILE,filein);
	m_Progress.SetPos(0);

	if(!Digest(mdname.GetBuffer(0),filein.GetBuffer(0),md_value,&md_len, outMsg,DrawProg))
	{
		m_List.AddMsg(outMsg,M_ERROR);
		return;
	}
	for(unsigned i=0;i<md_len;i++)
	{
		sprintf((char *)&buf[i*2],"%02x",md_value[i]);//02x标示1个16进制变为2个字符,空补零
	}
	SetDlgItemText(IDC_EDIT_DIGEST,(char *)buf);
}

void CUsbEvpPage::OnBsign() //数字签名
{
	// TODO: Add your control notification handler code here
	CString mdname,filein,fileout;
	char outMsg[100]="";
	GetDlgItemText(IDC_COMBO_DIGEST,mdname);
	GetDlgItemText(IDC_EDIT_INFILE,filein);
	GetDlgItemText(IDC_EDIT_OUTFILE,fileout);
	m_Progress.SetPos(0);

	/*私钥*/
	HRSRC hRsrc=FindResource(NULL,MAKEINTRESOURCE(IDR_ROOT_KEY),"CERT");
	DWORD lenKey = SizeofResource(NULL, hRsrc); 
	HGLOBAL hgKey=LoadResource(NULL,hRsrc);
	LPSTR lpKey=(LPSTR)LockResource(hgKey);

	if(!Sign(lpKey,lenKey,mdname.GetBuffer(0),filein.GetBuffer(0),
		fileout.GetBuffer(0),outMsg,DrawProg))
	{
		m_List.AddMsg(outMsg,M_ERROR);
		return;
	}
	m_List.AddMsg("数字签名成功");
}

void CUsbEvpPage::OnBvsign()// 签名验证
{
	// TODO: Add your control notification handler code here
	CString mdname,filein,fileout;
	char outMsg[100]="";
	GetDlgItemText(IDC_COMBO_DIGEST,mdname);
	GetDlgItemText(IDC_EDIT_INFILE,filein);
	GetDlgItemText(IDC_EDIT_OUTFILE,fileout);
	m_Progress.SetPos(0);
  	/*得到公钥*/
	HRSRC hRsrc=FindResource(NULL,MAKEINTRESOURCE(IDR_ROOT_CERT),"CERT");
	DWORD lenCert = SizeofResource(NULL, hRsrc); 
	HGLOBAL hgCert=LoadResource(NULL,hRsrc);
	LPSTR lpCert=(LPSTR)LockResource(hgCert);

	if(!VerifySign(lpCert,lenCert,mdname.GetBuffer(0),filein.GetBuffer(0),
		fileout.GetBuffer(0),outMsg,DrawProg))
	{
		m_List.AddMsg(outMsg,M_ERROR);
		return;
	}
	m_List.AddMsg("验证签名成功");
	
}

void CUsbEvpPage::OnBrsacert() //公钥加密
{
	// TODO: Add your control notification handler code here
	CString cert,filein,fileout;
	char outMsg[100]="";
	GetDlgItemText(IDC_EDIT_INFILE,filein);
	GetDlgItemText(IDC_EDIT_OUTFILE,fileout);
	m_Progress.SetPos(0);
	/*得到公钥*/
	HRSRC hRsrc=FindResource(NULL,MAKEINTRESOURCE(IDR_ROOT_CERT),"CERT");
	DWORD lenCert = SizeofResource(NULL, hRsrc); 
	HGLOBAL hgCert=LoadResource(NULL,hRsrc);
	LPSTR lpCert=(LPSTR)LockResource(hgCert);

	if(!RSAEnc(lpCert,lenCert,filein.GetBuffer(0),fileout.GetBuffer(0),outMsg,DrawProg))
	{
		m_List.AddMsg(outMsg,M_ERROR);
		return;
	}
	m_List.AddMsg("加密成功");
}

void CUsbEvpPage::OnBrsakey() //私钥解密
{
	// TODO: Add your control notification handler code here
	CString key,filein,fileout;
	char outMsg[100]="";
	GetDlgItemText(IDC_EDIT_INFILE,filein);
	GetDlgItemText(IDC_EDIT_OUTFILE,fileout);
	m_Progress.SetPos(0);
	/*根私钥*/
	HRSRC hRsrc=FindResource(NULL,MAKEINTRESOURCE(IDR_ROOT_KEY),"CERT");
	DWORD lenKey = SizeofResource(NULL, hRsrc); 
	HGLOBAL hgKey=LoadResource(NULL,hRsrc);
	LPSTR lpKey=(LPSTR)LockResource(hgKey);
	if(!RSADec(lpKey,lenKey,filein.GetBuffer(0), 
		  fileout.GetBuffer(0),outMsg,DrawProg))
	{
		m_List.AddMsg(outMsg,M_ERROR);
		return;
	}
	m_List.AddMsg("解密成功");
}
void CUsbEvpPage::DrawProg(int i)
{
	((CUsbEvpPage *)((CPropertySheet *)AfxGetMainWnd())->GetPage(8))->
		m_Progress.SetPos(i);
}

⌨️ 快捷键说明

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