Пример #1
0
//	リストア処理実行ボタン
void CBackupDialog::OnBtnRestore() 
{
	UpdateData(TRUE);	// DDX更新

	CString str;
	CFileFind finder;

	// リストアデータフォルダ
	BOOL blFind = FALSE;
	CString strFolder;
	m_edtRestorePath.GetWindowText(strFolder);
	if (strFolder.IsEmpty()) return;
	CFileSpec fs(strFolder);
	if (fs.Exist()) {
		if (fs.GetFileName() == _T("tapur.backup")) {
			blFind = TRUE;
		} else {
			fs.SetFullSpec(strFolder + _T("\\tapur.backup"));
			if (fs.Exist()) {
				strFolder += _T("\\tapur.backup");
				blFind = TRUE;
			}
		}
	}
	if (!blFind) {
		str.LoadString(IDS_MSGBOX913);
		AfxMessageBox(str, MB_OK | MB_APPLMODAL | MB_ICONEXCLAMATION);
		return;
	}

	str.LoadString(IDS_MSGBOX912);
	if (AfxMessageBox(str, MB_YESNO | MB_APPLMODAL | MB_ICONQUESTION ) != IDYES) return;

	// リストア処理
	CFileSpec fs_out(theApp.m_strDataFolder);	// user data folder
	CString strOrgFolder = fs_out.GetFolder();	// data folder
	fs_out.SetFullSpec(strOrgFolder);
	if (fs_out.Exist()) {
		if (!fs_out.FileDelete(TRUE, this->m_hWnd)) goto PROC_CANCEL;
	}
	if (!fs.FileCopy(strOrgFolder, TRUE, TRUE, this->m_hWnd)) goto PROC_CANCEL;

	// データベースの書き換え
	BOOL bWorking = finder.FindFile(strOrgFolder + _T("\\*"));
	while (bWorking)
	{
		bWorking = finder.FindNextFile();
		if (!finder.IsDirectory()) continue;
		str = finder.GetFileName();
		if (str == _T(".") || str == _T("..")) continue;

		CString strTbl = finder.GetFilePath() + _T("\\") + _T(DBFILE_NAME);
		CTblRdfl tbl(strTbl);
		CString strWhere(_T("lngSystemFlag>=0"));
		long lngCnt = tbl.CountRec(strWhere);	// all
		if (lngCnt == 0) continue;

		CString strSet = _T("strRemarks1='") + finder.GetFilePath() + _T("'");
		if (!tbl.UpdateRec(strSet, strWhere)) goto PROC_CANCEL;
	} 

	str.LoadString(IDS_MSGBOX918);
	AfxMessageBox(str, MB_OK | MB_APPLMODAL | MB_ICONINFORMATION);
	return;
PROC_CANCEL:
	str.LoadString(IDS_MSGBOX920);
	AfxMessageBox(str, MB_OK | MB_APPLMODAL | MB_ICONEXCLAMATION);
}
Пример #2
0
void EM_AES::decrypt(struct EM_AESFILE & aesfile)
{	
	this->_init_key(AES_DECRYPT);

	string inputfile = EM_TMP_FILENAME;
	
	// ifstream 读入文件
	ifstream fs_in(inputfile.c_str(), ios::in|ios::binary);
	
	if (!fs_in)
		throw (string)"文件读取时发生错误...";
	// 计算文件大小
	fs_in.seekg(0, ios::end);
	int size = fs_in.tellg();
	
	if (size > EM_MAX_FILE_SIZE)
		throw (string) "文件大小超过限制...";
	else if (size % AES_BLOCK_SIZE != 0)
		throw (string) "输入的文件不是AES块的整数倍大小...";
		
	char* tmp_in = new char[size];
	unsigned char* u_tmp_in = new unsigned char[size];
	
	unsigned char* u_tmp_out = new unsigned char[size];
	char* tmp_out = new char[size-aesfile.padsize];
	
	fs_in.seekg(0, ios::beg);
	fs_in.read(tmp_in, size);
	fs_in.close();
	
	memcpy(u_tmp_in, tmp_in, size);
	
	int i=0;
	int j=0;
	
	unsigned char tmp[AES_BLOCK_SIZE] = {0};
	unsigned char tmp2[AES_BLOCK_SIZE] = {0};

	// 按AES_BLOCK_SIZE来循环
	for (i=0; i<size; i+=AES_BLOCK_SIZE)
	{
		// 每次对block 内存拷贝
		for (j=0; j<AES_BLOCK_SIZE; j++)
		{
			tmp[j] = u_tmp_in[i+j];
		}
		// 块加密
		AES_decrypt( tmp, tmp2, &this->m_aes_key);
		// 加密后的数据复制到目标空间
		for (j=0; j<AES_BLOCK_SIZE; j++)
		{
			u_tmp_out[i+j] = tmp2[j];
		}
	}

	memcpy(tmp_out, u_tmp_out, size-aesfile.padsize);
	
	ofstream fs_out(aesfile.filename.c_str(), ios::out|ios::binary);
	fs_out.write(tmp_out, size-aesfile.padsize);
	fs_out.close();
	
	delete[] tmp_in;
	delete[] tmp_out;
	delete[] u_tmp_in;
	delete[] u_tmp_out;
}
Пример #3
0
//	バックアップ処理実行ボタン
void CBackupDialog::OnBtnBackup() 
{
	UpdateData(TRUE);	// DDX更新

	CString str;
	CTPsetup tps;
	CString strOrg;
	CString strNew;
	CFileFind finder;

	// バックアップ先フォルダ
	CString strFolder;
	m_edtBackupPath.GetWindowText(strFolder);
	if (strFolder.IsEmpty()) return;
	CFileSpec fs(strFolder);
	if (!fs.Exist()) return;

	str.LoadString(IDS_MSGBOX911);
	if (AfxMessageBox(str, MB_YESNO | MB_APPLMODAL | MB_ICONQUESTION ) != IDYES) return;

	// バックアップ処理
	// 規定のデータをコピー
	fs.SetFullSpec(theApp.m_strDataFolder);	// user data folder
	CString strOrgFolder = fs.GetFolder();	// data folder
	fs.SetFullSpec(strOrgFolder);
	strFolder += _T("\\tapur.backup");
	CFileSpec fs_out(strFolder);
	if (fs_out.Exist()) {
		if (!fs_out.FileDelete(TRUE, this->m_hWnd)) goto PROC_CANCEL;
	}
	if (!fs.FileCopy(strFolder, TRUE, TRUE, this->m_hWnd)) goto PROC_CANCEL;

	// ユーザ指定パスのデータをコピー(コピー済みは除外)
	BOOL bWorking = finder.FindFile(strFolder + _T("\\*"));
	while (bWorking)
	{
		bWorking = finder.FindNextFile();
		if (!finder.IsDirectory()) continue;
		str = finder.GetFileName();
		if (str == _T(".") || str == _T("..")) continue;

		CString strTbl = finder.GetFilePath() + _T("\\") + _T(DBFILE_NAME);
		CTblRdfl tbl(strTbl);
		long lngCnt = tbl.SelectRec(_T("lngSystemFlag>=0 order by lngSystemNew desc"));	// all
		while (lngCnt > 0)
		{
			tps.SetCallerId(tbl.strSenderId);
			str = strFolder + _T("\\") + tbl.strReceiverId;
			// wav file
			strOrg = tps.FindRdfWavFileName(tbl.strRemarks1, tbl.dlngSystemNew, _T("$$"));
			strNew = tps.FindRdfWavFileName(str, tbl.dlngSystemNew, _T("$$"));
			if (!strOrg.IsEmpty() && strNew.IsEmpty()) {
				fs.SetFullSpec(strOrg);
				strNew = tps.RdfWavFileName(str + _T(RDF_WAV_PATH), tbl.dlngSystemNew, _T("$$"));
				if (!fs.FileCopy(strNew, TRUE, TRUE, this->m_hWnd)) goto PROC_CANCEL;
			}
			// mp3 file
			strOrg = tps.FindRdfMp3FileName(tbl.strRemarks1, tbl.dlngSystemNew, _T("$$"));
			strNew = tps.FindRdfMp3FileName(str, tbl.dlngSystemNew, _T("$$"));
			if (!strOrg.IsEmpty() && strNew.IsEmpty()) {
				fs.SetFullSpec(strOrg);
				strNew = tps.RdfMp3FileName(str + _T(RDF_MP3_PATH), tbl.dlngSystemNew, _T("$$"));
				if (!fs.FileCopy(strNew, TRUE, TRUE, this->m_hWnd)) goto PROC_CANCEL;
			}
			// avi file
			strOrg = tps.FindRdfVideoFileName(tbl.strRemarks1, tbl.dlngSystemNew, _T("$$"));
			strNew = tps.FindRdfVideoFileName(str, tbl.dlngSystemNew, _T("$$"));
			if (!strOrg.IsEmpty() && strNew.IsEmpty()) {
				fs.SetFullSpec(strOrg);
				strNew = tps.RdfVideoFileName(str + _T(RDF_AVI_PATH), tbl.dlngSystemNew, _T("$$"));
				if (!fs.FileCopy(strNew, TRUE, TRUE, this->m_hWnd)) goto PROC_CANCEL;
			}

			if (!tbl.NextRec()) break;
			--lngCnt;
		}
	} 

	str.LoadString(IDS_MSGBOX917);
	AfxMessageBox(str, MB_OK | MB_APPLMODAL | MB_ICONINFORMATION);
	return;
PROC_CANCEL:
	str.LoadString(IDS_MSGBOX919);
	AfxMessageBox(str, MB_OK | MB_APPLMODAL | MB_ICONEXCLAMATION);
}