// リストア処理実行ボタン 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); }
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; }
// バックアップ処理実行ボタン 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); }