/// <summary> /// 解密nets试卷 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btn_decode_Click(object sender, EventArgs e) { string tempPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "temp_nets_paper"); FileHelper.DeleteFolder(tempPath); Directory.CreateDirectory(tempPath); if (!File.Exists(filePaper) || !File.Exists(fileCode)) { MessageBox.Show("请选择试卷包和授权码!"); return; } //1、复制源文件到临时目录 string filePaperTemp = Path.Combine(tempPath, new FileInfo(filePaper).Name); string fileCodeTemp = Path.Combine(tempPath, new FileInfo(fileCode).Name); FileHelper.FileCopy(filePaper, filePaperTemp, true); FileHelper.FileCopy(fileCode, fileCodeTemp, true); //2、固定密码解密otp,并解压 string paperTemp = tempPath + "\\paperTemp"; int result1 = SecModule.FileVerify(PWD, filePaperTemp); FileCompress.DecompressFile(filePaperTemp, paperTemp, PWD, null); //3、固定密码解密osqm,并解压 string codeTemp = tempPath + "\\codeTemp"; int result2 = SecModule.FileVerify(PWD, fileCodeTemp); FileCompress.DecompressFile(fileCodeTemp, codeTemp, PWD, null); //4、授权码解密试卷包,并解压 string sqmm = XmlHelper.Read(codeTemp + "\\Codeinfo.xml", "CodeInfo/CodeData/sqmm", ""); FileInfo[] fileList = new DirectoryInfo(paperTemp).GetFiles(); foreach (FileInfo fi in fileList) { if (fi.Extension.Equals(".zip")) { int a = SecModule.FileVerify(sqmm, fi.FullName); FileCompress.DecompressFile(fi.FullName, paperTemp, PWD, null); } } //5、固定密码解密kjs,并解压 string kjsForder = ""; fileList = new DirectoryInfo(paperTemp).GetFiles(); foreach (FileInfo fi in fileList) { if (fi.Extension.Equals(".kjs")) { int result3 = SecModule.FileVerify(PWD, fi.FullName); kjsForder = paperTemp + "\\" + fi.Name.Replace(".kjs", ""); FileCompress.DecompressFile(fi.FullName, kjsForder, PWD, null); } } ShowPaper(paperTemp + "\\PaperInfo.xml"); }
/// <summary> /// 修改Spoken试卷包xml /// </summary> /// <param name="kjsForder"></param> private void editSpokenPaper(string kjsForder, string sqmm, PaperEntity pe) { //修改paper.xml FileInfo[] filePaperXmlList = new DirectoryInfo(kjsForder).GetFiles("paper.xml"); FileInfo filePaperXml = filePaperXmlList[0]; //修改试卷代码 XmlHelper.Update(filePaperXml.FullName, "/Paper/PaperInfo/PaperNO", "", pe.paperNo); //修改试卷小题代码 try { XmlDocument doc = new XmlDocument(); doc.Load(filePaperXml.FullName); XmlElement xe = doc.SelectSingleNode("/Paper/QuestionList") as XmlElement; XmlNodeList xnl = xe.ChildNodes; int i = 0; foreach (XmlNode xn in xnl) { XmlNode xnQuestionNO = xn.SelectSingleNode("QuestionNO"); XmlElement xe01 = (XmlElement)xnQuestionNO; xe01.InnerText = pe.questionNo[i]; doc.Save(filePaperXml.FullName); i++; } //压缩加密spoken试卷包 DirectoryInfo di = new DirectoryInfo(kjsForder); string saveFile = txt_save.Text.Trim() + "\\" + di.Name + ".ksj"; //压缩ksj FileCompress.CompressFiles(kjsForder, saveFile, SPOKENPWD, null, true); //固定密码加密kjs int result3 = SecModule.FileVerify(SPOKENPWD, saveFile); //第二次压缩成zip string saveFile1 = saveFile.Replace(".ksj", ".zip"); FileCompress.CompressFiles(saveFile, saveFile1, SPOKENPWD, null, true); //授权码加密zip int result2 = SecModule.FileVerify(sqmm, saveFile1); //第三压缩成zip string saveFile2 = saveFile.Replace(".ksj", ".zip"); FileCompress.CompressFiles(saveFile1, txt_save.Text.Trim(), SPOKENPWD, null, true); //授权码加密zip //int result2 = SecModule.FileVerify(sqmm, saveFile1); } catch { } }
private void btn_spoken_brw_result_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "结果包文件(*.cdp)|*.cdp;"; ofd.ValidateNames = true; ofd.CheckPathExists = true; ofd.CheckFileExists = true; if (ofd.ShowDialog() == DialogResult.OK) { fileResult = ofd.FileName; txt_spoken_result.Text = fileResult; fileSign = fileResult.Replace(".cdp", ".ckp"); if (File.Exists(fileSign)) { txt_spoken_sign.Text = fileSign; } StringBuilder sb = new StringBuilder(fileResult); StringBuilder co = new StringBuilder(); SecModule.GetFileSignMD5(sb, co); } }
/// <summary> /// 解压nets试卷包 /// </summary> /// <param name="filePaper"></param> /// <param name="fileCode"></param> /// <param name="tempPath"></param> private void unZipNetsPaper(FileInfo[] netsPaperFileList) { string tempPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "netsTemp"); FileHelper.DeleteFolder(tempPath); Directory.CreateDirectory(tempPath); foreach (FileInfo f in netsPaperFileList) { string filePaper = f.FullName; string fileCode = filePaper.Replace(".otp", ".osqm"); if (f.Extension.Equals(".otp")) { //1、复制源文件到临时目录 string filePaperTemp = Path.Combine(tempPath, new FileInfo(filePaper).Name); string fileCodeTemp = Path.Combine(tempPath, new FileInfo(fileCode).Name); FileHelper.FileCopy(filePaper, filePaperTemp, true); FileHelper.FileCopy(fileCode, fileCodeTemp, true); //2、固定密码解密otp,并解压 string fileName = f.Name.Replace(".otp", ""); string paperTemp = tempPath + "\\paperTemp\\" + fileName; int result1 = SecModule.FileVerify(NETSPWD, filePaperTemp); FileCompress.DecompressFile(filePaperTemp, paperTemp, NETSPWD, null); //3、固定密码解密osqm,并解压 string codeTemp = tempPath + "\\codeTemp\\" + fileName; int result2 = SecModule.FileVerify(NETSPWD, fileCodeTemp); FileCompress.DecompressFile(fileCodeTemp, codeTemp, NETSPWD, null); //4、授权码解密试卷包,并解压 string sqmm = XmlHelper.Read(codeTemp + "\\Codeinfo.xml", "CodeInfo/CodeData/sqmm", ""); FileInfo[] fileList = new DirectoryInfo(paperTemp).GetFiles(); foreach (FileInfo fi in fileList) { if (fi.Extension.Equals(".zip")) { int a = SecModule.FileVerify(sqmm, fi.FullName); FileCompress.DecompressFile(fi.FullName, paperTemp, NETSPWD, null); } } //5、固定密码解密kjs,并解压 string kjsForder = ""; fileList = new DirectoryInfo(paperTemp).GetFiles(); foreach (FileInfo fi in fileList) { if (fi.Extension.Equals(".kjs")) { int result3 = SecModule.FileVerify(NETSPWD, fi.FullName); kjsForder = paperTemp + "\\" + fi.Name.Replace(".kjs", ""); FileCompress.DecompressFile(fi.FullName, kjsForder, NETSPWD, null); //提取nets试卷xml中数据 FileInfo[] filePaperXmlList = new DirectoryInfo(paperTemp).GetFiles("PaperInfo.xml"); FileInfo filePaperXml = filePaperXmlList[0]; XmlElement xe = XmlHelper.GetXmlElement(filePaperXml.FullName, "/PaperInfo/PaperList"); XmlNodeList xnl = xe.ChildNodes; PaperEntity pe = new PaperEntity();; foreach (XmlNode xn in xnl) { pe.paperNo = xn.SelectSingleNode("sjdm").InnerText; } XmlElement xe1 = XmlHelper.GetXmlElement(filePaperXml.FullName, "/PaperInfo/ItemList"); XmlNodeList xnl1 = xe1.ChildNodes; List <string> lists = new List <string>(); foreach (XmlNode xn1 in xnl1) { lists.Add(xn1.SelectSingleNode("xtdm").InnerText); } pe.questionNo = lists; listPaperEntity.Add(pe); } } } //DoPaper(paperTemp + "\\PaperInfo.xml", kjsForder + "\\js\\requestData.json"); } }
private void button1_Click(object sender, EventArgs e) { string stuTemp = "C:\\stuTemp"; FileHelper.DeleteFolder(stuTemp); Directory.CreateDirectory(stuTemp); string resultTemp = "C:\\resultTemp"; FileHelper.DeleteFolder(resultTemp); Directory.CreateDirectory(resultTemp); string signTemp = "C:\\signTemp"; FileHelper.DeleteFolder(signTemp); Directory.CreateDirectory(signTemp); string resultFolder = txt_nets_result.Text.Trim(); if (string.IsNullOrEmpty(resultFolder)) { MessageBox.Show("请选择NETS结果包路径!"); return; } string saveFolder = txt_save.Text.Trim(); if (string.IsNullOrEmpty(saveFolder)) { MessageBox.Show("请选择转换后路径!"); return; } FileHelper.DeleteFolder(saveFolder); Directory.CreateDirectory(saveFolder); DirectoryInfo di = new DirectoryInfo(resultFolder); FileInfo[] fileList = di.GetFiles(); foreach (FileInfo f in fileList) { string odaTemp = ""; string oda = ""; string okw = ""; if (f.Extension == ".oda") { oda = f.FullName; okw = oda.Replace(".oda", ".okw"); //解开nets结果包 ChangeResultPack.Main.Open(oda, okw, out odaTemp); //创建spoken结果包ccda.xml ChangeResultPack.Main.CreateCcdaXml(odaTemp + "\\ExamData.xml", odaTemp + "\\ExamAnswer.xml", resultTemp); //创建spoken结果包cckw.xml ChangeResultPack.Main.CreateCckwXml(odaTemp + "\\ExamData.xml", odaTemp + "\\ExamAnswer.xml", signTemp); DirectoryInfo diSpoken = new DirectoryInfo(odaTemp + "\\SPOKEN"); DirectoryInfo[] stusFolder = diSpoken.GetDirectories(); foreach (DirectoryInfo sf in stusFolder) { if (sf.Name == "temp") { continue; } FileHelper.FolderCreate(stuTemp); DirectoryInfo diStu = new DirectoryInfo(sf.FullName); FileInfo[] queFolder = diStu.GetFiles(); foreach (FileInfo qf in queFolder) { //将考生小题下的录音文件解压到stuTemp FileCompress.DecompressFile(qf.FullName, stuTemp, null, null); } //创建Answer.xml到stuTemp ChangeResultPack.Main.CreateAnswerXml(sf.FullName, odaTemp + "\\ExamAnswer.xml", stuTemp); FileCompress.CompressFolder(stuTemp, Path.Combine(resultTemp, diStu.Name + ".zip"), null, null); FileHelper.DeleteFolder(stuTemp); } //压缩考试结果包cdp string zipFile = Path.Combine(saveFolder, f.Name.Replace(".oda", ".zip")); int result1 = FileCompress.CompressFolder(resultTemp, zipFile, SPOKENPWD, null); //固定密码加密结果包cdp int result2 = SecModule.FileSign(SPOKENPWD, zipFile); string cdpFile = Path.ChangeExtension(zipFile, ".cdp"); FileHelper.FileMove(zipFile, cdpFile); //压缩考试结果签名包ckp zipFile = Path.Combine(saveFolder, f.Name.Replace(".oda", ".zip")); int result3 = FileCompress.CompressFolder(signTemp, zipFile, SPOKENPWD, null); //固定密码加密结果签名包ckp int result4 = SecModule.FileSign(SPOKENPWD, zipFile); string ckpFile = Path.ChangeExtension(zipFile, ".ckp"); FileHelper.FileMove(zipFile, ckpFile); FileHelper.FileDel(zipFile); } } }
/// <summary> /// 解压spoken试卷包 /// </summary> /// <param name="filePaper"></param> /// <param name="fileCode"></param> /// <param name="tempPath"></param> private void unZipSpokenPaper(FileInfo[] spokenPaperFileList) { string tempPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "spokenTemp"); FileHelper.DeleteFolder(tempPath); Directory.CreateDirectory(tempPath); foreach (FileInfo f in spokenPaperFileList) { string filePaper = f.FullName; string fileCode = filePaper.Replace(".sjp", ".code"); if (f.Extension.Equals(".sjp")) { //1、复制源文件到临时目录 string filePaperTemp = Path.Combine(tempPath, f.Name); string fileCodeTemp = Path.Combine(tempPath, new FileInfo(fileCode).Name); FileHelper.FileCopy(filePaper, filePaperTemp, true); FileHelper.FileCopy(fileCode, fileCodeTemp, true); //2、固定密码解密otp,并解压 string fileName = f.Name.Replace(".sjp", ""); string paperTemp = tempPath + "\\paperTemp\\" + fileName; //校验试卷文件头类型 UnSign(filePaperTemp); int result1 = SecModule.FileVerify(SPOKENPWD, filePaperTemp); int unResult1 = FileCompress.DecompressFile(filePaperTemp, paperTemp, SPOKENPWD, null); //3、固定密码解密osqm,并解压 string codeTemp = tempPath + "\\codeTemp\\" + fileName; int result2 = SecModule.FileVerify(SPOKENPWD, fileCodeTemp); FileCompress.DecompressFile(fileCodeTemp, codeTemp, SPOKENPWD, null); //4、授权码解密试卷包,并解压 string strContent = File.ReadAllText(Path.Combine(codeTemp, "Code.ini")); string sqmm = strContent.Substring(strContent.IndexOf('=') + 1, strContent.IndexOf("ZIPMd5Code=") - strContent.IndexOf('=') - 3); FileInfo[] fileList = new DirectoryInfo(paperTemp).GetFiles(); foreach (FileInfo fi in fileList) { if (fi.Extension.Equals(".zip")) { int a = SecModule.FileVerify(sqmm, fi.FullName); FileCompress.DecompressFile(fi.FullName, paperTemp, SPOKENPWD, null); } } //5、固定密码解密ksj,并解压 string kjsForder = ""; fileList = new DirectoryInfo(paperTemp).GetFiles(); int i = 0; foreach (FileInfo fi in fileList) { if (fi.Extension.Equals(".ksj")) { int result3 = SecModule.FileVerify(SPOKENPWD, fi.FullName); kjsForder = paperTemp + "\\" + fi.Name.Replace(".ksj", ""); FileCompress.DecompressFile(fi.FullName, kjsForder, SPOKENPWD, null); //修改Spoken试卷包xml editSpokenPaper(kjsForder, sqmm, listPaperEntity[i]); i++; } } } } }
private void btn_spokenChange_Click(object sender, EventArgs e) { string tempPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "temp_spoken_paper"); FileHelper.DeleteFolder(tempPath); Directory.CreateDirectory(tempPath); if (!File.Exists(filePaper) || !File.Exists(fileCode)) { MessageBox.Show("请选择试卷包和授权码!"); return; } //1、复制源文件到临时目录 string filePaperTemp = Path.Combine(tempPath, new FileInfo(filePaper).Name); string fileCodeTemp = Path.Combine(tempPath, new FileInfo(fileCode).Name); FileHelper.FileCopy(filePaper, filePaperTemp, true); FileHelper.FileCopy(fileCode, fileCodeTemp, true); //2、固定密码解密otp,并解压 string paperTemp = tempPath + "\\paperTemp"; //校验试卷文件头类型 Sign(filePaperTemp); int result1 = SecModule.FileVerify(SPOKENPWD, filePaperTemp); int unResult1 = FileCompress.DecompressFile(filePaperTemp, paperTemp, SPOKENPWD, null); //3、固定密码解密osqm,并解压 string codeTemp = tempPath + "\\codeTemp"; int result2 = SecModule.FileVerify(SPOKENPWD, fileCodeTemp); FileCompress.DecompressFile(fileCodeTemp, codeTemp, SPOKENPWD, null); //4、授权码解密试卷包,并解压 string strContent = File.ReadAllText(Path.Combine(codeTemp, "Code.ini")); string sqmm = strContent.Substring(strContent.IndexOf('=') + 1, strContent.IndexOf("ZIPMd5Code=") - strContent.IndexOf('=') - 3); FileInfo[] fileList = new DirectoryInfo(paperTemp).GetFiles(); foreach (FileInfo fi in fileList) { if (fi.Extension.Equals(".zip")) { int a = SecModule.FileVerify(sqmm, fi.FullName); FileCompress.DecompressFile(fi.FullName, paperTemp, SPOKENPWD, null); } } //5、固定密码解密ksj,并解压 string kjsForder = ""; fileList = new DirectoryInfo(paperTemp).GetFiles(); foreach (FileInfo fi in fileList) { if (fi.Extension.Equals(".ksj")) { int result3 = SecModule.FileVerify(SPOKENPWD, fi.FullName); kjsForder = paperTemp + "\\" + fi.Name.Replace(".ksj", ""); FileCompress.DecompressFile(fi.FullName, kjsForder, SPOKENPWD, null); } } //打开文件夹 System.Diagnostics.Process.Start("Explorer.exe", tempPath); }