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

📄 aes1dlg.cpp

📁 该程序能实现将数字签名嵌入到BMP图片中形成数字印章
💻 CPP
字号:
// AES1Dlg.cpp : implementation file
//

#include "stdafx.h"
#include "PKI.h"
#include "PKIDlg.h"
#include "AES1Dlg.h"
#include "KAES.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAES1Dlg dialog


CAES1Dlg::CAES1Dlg(CWnd* pParent /*=NULL*/)
	: CDialog(CAES1Dlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CAES1Dlg)
	m_filename = _T("");
	m_filekey = _T("");
	m_filename1 = _T("");
	m_filename2 = _T("");
	m_plain = _T("");
	m_key = _T("");
	m_enctext = _T("");
	m_backtext = _T("");
	//}}AFX_DATA_INIT
}


void CAES1Dlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAES1Dlg)
	DDX_Text(pDX, IDC_EDIT1, m_filename);
	DDX_Text(pDX, IDC_EDIT2, m_filekey);
	DDX_Text(pDX, IDC_EDIT3, m_filename1);
	DDX_Text(pDX, IDC_EDIT4, m_filename2);
	DDX_Text(pDX, IDC_EDIT5, m_plain);
	DDX_Text(pDX, IDC_EDIT6, m_key);
	DDX_Text(pDX, IDC_EDIT7, m_enctext);
	DDX_Text(pDX, IDC_EDIT8, m_backtext);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CAES1Dlg, CDialog)
	//{{AFX_MSG_MAP(CAES1Dlg)
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
	ON_BN_CLICKED(IDC_BUTTON2, OnENCFILE)
	ON_BN_CLICKED(IDC_BUTTON3, OnDECFILE)
	ON_BN_CLICKED(IDC_BUTTON4, Onclear)
	ON_BN_CLICKED(IDC_BUTTON7, Onenc)
	ON_BN_CLICKED(IDC_BUTTON8, Ondec)
	ON_BN_CLICKED(IDC_BUTTON9, OnClear)
	ON_BN_CLICKED(IDC_BUTTON5, OnButton5)
	ON_BN_CLICKED(IDC_BUTTON6, OnButton6)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CAES1Dlg message handlers

void CAES1Dlg::OnButton1() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	CString str;
	CFileDialog dlg(1,NULL,NULL,OFN_HIDEREADONLY ,"All Files(*.*)|*.*||");
	if(IDOK!=dlg.DoModal())return;
	m_filename=dlg.GetPathName();	
	UpdateData(FALSE);
}

void CAES1Dlg::OnENCFILE() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	if(m_filename=="")return;
	FILE* ff;
	FILE* fp;
	ff=fopen((LPCTSTR)m_filename,"rb");
	if(!ff)return;
	fseek(ff,0,SEEK_END);
	long lFileLen=ftell(ff);
	fseek(ff,0,SEEK_SET);
	long c=lFileLen/16;
	long d=lFileLen%16;
	m_filename+=".aen";
	m_filename1=m_filename;
	fp=fopen((LPCTSTR)m_filename,"ab");
	if(!fp){fclose(ff);return;}
	unsigned char inBuff[25],ouBuff[25],skey[32];
    memcpy(skey,(LPCTSTR)m_filekey,24);
    KAES kaes(24,(unsigned char*)skey);
	for(long i=0;i<c;i++)
	{
		fread(inBuff,1,16,ff);
		kaes.Cipher(inBuff,ouBuff);
		fwrite(ouBuff,1,16,fp);
	}
	if(d)
	{
		memset(inBuff,0,16);
		c=fread(inBuff,1,d,ff);
		kaes.Cipher(inBuff,ouBuff);
		fwrite(ouBuff,1,16,fp);
	}
	fclose(ff);
	fclose(fp);
	MessageBox("加密成功!");
	UpdateData(FALSE);
}

void CAES1Dlg::OnDECFILE() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	if(m_filename1=="")return;
	FILE* ff;
	FILE* fp;
	ff=fopen((LPCTSTR)m_filename1,"rb");
	if(!ff)return;
	fseek(ff,0,SEEK_END);
	long lFileLen=ftell(ff);
	fseek(ff,0,SEEK_SET);
	long c=lFileLen/16;
	long d=lFileLen%16;
	m_filename2=m_filename1+".ade";
	fp=fopen((LPCTSTR)m_filename2,"w+");
	if(!fp){fclose(ff);return;}
	unsigned char inBuff[25],ouBuff[25],skey[32];
	memcpy(skey,(LPCTSTR)m_filekey,24);
    KAES kaes(24,(unsigned char*)skey);
	for(long i=0;i<c;i++)
	{
		fread(inBuff,1,16,ff);
		kaes.InvCipher(inBuff,ouBuff);
		fwrite(ouBuff,1,16,fp);
	}
	if(d)
	{
		MessageBox("文件可能已经损坏或未经AES加密过!");
	}
	fclose(ff);
	fclose(fp);
	MessageBox("解密成功!");
	UpdateData(FALSE);
}

void CAES1Dlg::Onclear() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	m_filename="";
	m_filekey="";
	m_filename1="";
	m_filename2="";
	UpdateData(FALSE);
}

void CAES1Dlg::Onenc() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
    unsigned char skey[32];
	unsigned char inbuff[32],oubuff[32];
	memcpy(skey,(LPCTSTR)m_key,24);
    KAES kaes(24,(unsigned char*)skey);
	int c=sizeof(inbuff);
	if(m_plain.GetLength()>16)
	{
		MessageBox("加密数据不超过16位,超过的部分截断!");
	}
	memcpy(inbuff,(LPCTSTR)m_plain,c);
    CString str;
    kaes.Cipher(inbuff,oubuff);
    for(int i=0;i<c;i++)
    str +=oubuff[i];
    m_enctext=str;
    UpdateData(FALSE);	
}

void CAES1Dlg::Ondec() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
    unsigned char skey[32];
    unsigned char inbuff[32],oubuff[32];
	memcpy(skey,(LPCTSTR)m_key,24);
	KAES kaes(24,(unsigned char*)skey);
	int c=sizeof(inbuff);
	memcpy(inbuff,(LPCTSTR)m_enctext,c);
    CString str;
    kaes.InvCipher(inbuff,oubuff);
    for(int i=0;i<16;i++)
    str +=oubuff[i];
    m_backtext=str;
    UpdateData(FALSE);	
}

void CAES1Dlg::OnClear() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	m_plain="";
	m_key="";
	m_enctext="";
	m_backtext="";
    UpdateData(FALSE);
}

void CAES1Dlg::OnButton5() 
{
	// TODO: Add your control notification handler code here
	CPKIDlg dlg;
	dlg.DoModal();
	CDialog::OnCancel();
}

void CAES1Dlg::OnButton6() 
{
	// TODO: Add your control notification handler code here
	CDialog::OnCancel();
}

⌨️ 快捷键说明

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