Guest User

Untitled

a guest
Nov 24th, 2017
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.45 KB | None | 0 0
  1. UICommon.Base64StringToFile(UICommon.tbFileInfo.Str招标人加密公钥, str证书文件); // 保存加密公钥到本地
  2.  
  3. SplashScreen.SetTitleString("正在对投标文件进行加密(招标人公钥)......");
  4. String str加密后PBTB文件 = UICommon.tbFileInfo.StrPBTB文件 + ".enc";
  5. if (File.Exists(str加密后PBTB文件))
  6. {
  7. File.Delete(str加密后PBTB文件);
  8. }
  9.  
  10. String str解密后投标文件 = UICommon.tbFileInfo.StrPBTB文件 + ".dec";
  11. if (File.Exists(str解密后投标文件))
  12. {
  13. File.Delete(str解密后投标文件);
  14. }
  15.  
  16. String str招标人公钥加密后的对称密钥 = String.Empty;
  17. String str加密前原文Hash值 = CommonFunction.ComputeSHA1(UICommon.tbFileInfo.StrPBTB文件);
  18.  
  19. try
  20. {
  21. TrueLore.CA.南京.EncryptCommon.GetEnCryptData64(UICommon.tbFileInfo.StrPBTB文件
  22. , str加密前原文Hash值
  23. , str证书文件
  24. , str解密后投标文件
  25. , out str招标人公钥加密后的对称密钥); // 密钥对的密文
  26. }
  27. catch
  28. {
  29. TrueLoreMessageBox.ShowMessage("招标人公钥加密后失败!" + Environment.NewLine + TrueLore.CA.南京.EncryptCommon.GetErrorInfo());
  30. return false;
  31. }
  32.  
  33. String str加密后原文Hash值 = CommonFunction.ComputeSHA1(UICommon.tbFileInfo.StrPBTB文件);
  34. if (!str加密后原文Hash值.Equals(str加密前原文Hash值))
  35. {
  36. File.Delete(str解密后投标文件);
  37. TrueLoreMessageBox.ShowMessage("一次加密后原文的Hash与加密前原文的Hash值不一致!");
  38. return false;
  39. }
  40.  
  41. if (!CommonFunction.ComputeSHA1(str解密后投标文件).Equals(str加密前原文Hash值))
  42. {
  43. File.Delete(str解密后投标文件);
  44. TrueLoreMessageBox.ShowMessage("一次加密后解密出来的投标文件的Hash与原文Hash值不一致!");
  45. return false;
  46. }
  47.  
  48. UICommon.tbFileInfo.Str一次加密后的原文Hash值 = str招标人公钥加密后的对称密钥.Split('|')[1].ToUpper();
  49. if (!UICommon.tbFileInfo.Str一次加密后的原文Hash值.Equals(str加密前原文Hash值))
  50. {
  51. File.Delete(str解密后投标文件);
  52. TrueLoreMessageBox.ShowMessage("一次加密后返回的Hash与原文Hash值不一致!");
  53. return false;
  54. }
  55.  
  56. if (String.IsNullOrEmpty(str招标人公钥加密后的对称密钥))
  57. {
  58. TrueLoreMessageBox.ShowMessage("招标人公钥加密后的对称密钥为空!");
  59. return false;
  60. }
  61.  
  62. if (!File.Exists(str加密后PBTB文件))
  63. {
  64. TrueLoreMessageBox.ShowMessage("招标人公钥加密后的PBTB文件不存在!");
  65. return false;
  66. }
  67.  
  68. SplashScreen.SetTitleString("正在对投标文件进行二次加密(RSA算法)......");
  69. TrueLore.CA.南京.EncryptCommon.GetEnCryptSK(str招标人公钥加密后的对称密钥, out str二次加密的对称密钥密文); // 用投标人的公钥对密钥对密文再次加密
  70. if (String.IsNullOrEmpty(str二次加密的对称密钥密文))
  71. {
  72. TrueLoreMessageBox.ShowMessage("投标人公钥二次加密后的对称密钥密文为空!");
  73. return false;
  74. }
  75. #endregion
  76.  
  77. String secEncryptCert = String.Empty; // 再次取得加密证书对加密过程进行验证
  78. TrueLore.CA.南京.DigitalSignCommon.SelectCert(CA.南京.Enum证书用途.加密);
  79. TrueLore.CA.南京.DigitalSignCommon.GetCertEncrypt(out secEncryptCert);// 取得加密证书
  80. if (str加密证书 != secEncryptCert)
  81. TrueLoreMessageBox.ShowMessage("二次取得加密证书不一致!");
  82. return false;
  83. }
  84.  
  85. #region 合并文件生成电子标书
  86. SplashScreen.SetTitleString("正在合并电子标书文件......");
  87. SplashScreen.BeginDisplay();
  88.  
  89. String saveNTFFileName = "【" + UICommon.tbFileInfo.Str标段编号.Trim() + "】投标文件" + DateTime.Now.ToString("yyyyMMddHHmmss") + SettingClass.Entity地区系统设置.TBJ后缀;
  90. String str投标文件NTF = CommonFunction.FilePathCombine(str刻录文件夹, saveNTFFileName);
  91. if (File.Exists(str投标文件NTF))
  92. {
  93. File.Delete(str投标文件NTF);
  94. }
  95.  
  96. XmlTextWriter xmlwriter = new XmlTextWriter(str投标文件NTF, System.Text.Encoding.UTF8);// 生成一个XML文档书写器
  97. xmlwriter.WriteStartDocument();// 开始输出XML文档
  98. xmlwriter.WriteStartElement("TBFile");// 开始创建根节点"TBFile"
  99. TrueLore.CA.南京.DigitalSignCommon.SelectCert(CA.南京.Enum证书用途.签名);
  100. str单位名称 = TrueLore.CA.南京.DigitalSignCommon.GetCertUnitName(); // 制作单位名称
  101. str创建投标文件的时间 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); // 创建投标文件
  102.  
  103. // 使用的招标文件或者答疑文件的唯一标示
  104. xmlwriter.WriteStartElement("UseZBFileGuid");
  105. xmlwriter.WriteString(UICommon.tbFileInfo.Is是否上传了答疑文件 ? UICommon.tbFileInfo.Str答疑文件的唯一标示 : UICommon.tbFileInfo.Str招标文件的唯一标示);
  106. xmlwriter.WriteEndElement();
  107.  
  108. xmlwriter.WriteStartElement("TBFileGuid");
  109. xmlwriter.WriteString(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(UICommon.tbFileInfo.Str标段编号.Trim()
  110. + str单位名称.Trim() + str创建投标文件的时间 + Convert.ToDecimal(UICommon.tbFileInfo.Str投标总价).ToString("0.##"), "MD5"));
  111. xmlwriter.WriteEndElement();
  112.  
  113. // 生成投标文件的投标人的加密锁号
  114. xmlwriter.WriteStartElement("UserIdentifier");
  115. if (!String.IsNullOrEmpty(UICommon.tbFileInfo.Str加密锁的ID))
  116. {
  117. xmlwriter.WriteString(UICommon.tbFileInfo.Str加密锁的ID);
  118. }
  119. else
  120. {
  121. xmlwriter.WriteString(TrueLore.CA.南京.HDGetIDCommon.获取加密锁的锁号());
  122. }
  123. xmlwriter.WriteEndElement();
  124.  
  125. xmlwriter.WriteStartElement("IsRecordDisk");
  126. xmlwriter.WriteString("1");
  127. xmlwriter.WriteEndElement();
  128.  
  129. // 加密信息E
  130. xmlwriter.WriteStartElement("Cryptograph");
  131. FileStream fileStream = new FileStream(str加密后PBTB文件, FileMode.Open);
  132. Int32 count = 1;
  133. Byte[] bytes = new Byte[1024];
  134. while (count != 0)
  135. {
  136. count = fileStream.Read(bytes, 0, 1024);
  137. if (count < 1024)
  138. {
  139. String value = System.Text.Encoding.UTF8.GetString(bytes, 0, count);
  140. value = value.TrimEnd('\0');
  141. xmlwriter.WriteString(value);
  142. break;
  143. }
  144. else
  145. {
  146. xmlwriter.WriteString(System.Text.Encoding.UTF8.GetString(bytes, 0, 1024));
  147. }
  148. }
  149. fileStream.Close();
  150. xmlwriter.WriteEndElement();
  151.  
  152. // 投标文件的数字签名(DS)
  153. xmlwriter.WriteStartElement("TBFileDigitalSignal");
  154. xmlwriter.WriteString(str签名信息DS);
  155. xmlwriter.WriteEndElement();
  156.  
  157. // 招标文件中招标人(招标代理)的公钥
  158. xmlwriter.WriteStartElement("ZBREncryptPublicKey");
  159. xmlwriter.WriteString(UICommon.tbFileInfo.Str招标人加密公钥);
  160. xmlwriter.WriteEndElement();
  161.  
  162. // 投标人的公钥PBA注:此证书为签名证书,主要用来校验投标文件的正确性
  163. xmlwriter.WriteStartElement("TBRPublicKey");
  164. xmlwriter.WriteString(str签名证书);
  165. xmlwriter.WriteEndElement();
  166.  
  167. // 投标人的公钥PBA 注:此证书为加密证书
  168. xmlwriter.WriteStartElement("TBREncryptPublicKey");
  169. xmlwriter.WriteString(str加密证书);
  170. xmlwriter.WriteEndElement();
  171.  
  172. // 数字信封DE2
  173. xmlwriter.WriteStartElement("DigitalEnvelope");
  174. xmlwriter.WriteString(str二次加密的对称密钥密文.Split('|')[0]);
  175. xmlwriter.WriteEndElement();
  176.  
  177. // 标段编号
  178. xmlwriter.WriteStartElement("BiaoDuanNo");
  179. xmlwriter.WriteString(UICommon.tbFileInfo.Str标段编号.Trim());
  180. xmlwriter.WriteEndElement();
  181.  
  182. // 标段名称
  183. xmlwriter.WriteStartElement("BiaoDuanName");
  184. xmlwriter.WriteString(UICommon.tbFileInfo.Str标段名称.Trim());
  185. xmlwriter.WriteEndElement();
  186.  
  187. xmlwriter.WriteStartElement("UnitName");
  188. xmlwriter.WriteString(str单位名称);
  189. xmlwriter.WriteEndElement();
  190.  
  191. xmlwriter.WriteStartElement("SoftName");
  192. xmlwriter.WriteString("筑龙");
  193. xmlwriter.WriteEndElement();
  194.  
  195. // 创建投标文件的时间
  196. xmlwriter.WriteStartElement("CreateData");
  197. xmlwriter.WriteString(str创建投标文件的时间);
  198. xmlwriter.WriteEndElement();
  199.  
  200. // 生成电脑上的网卡Mac地址
  201. xmlwriter.WriteStartElement("MachineKey");
  202. xmlwriter.WriteString(TrueLore.Common.CommonFunction.GetMacSN("-").Trim() + "@"
  203. + TrueLore.Common.CommonFunction.GetIDESN().Trim() + "@"
  204. + UICommon.获取CPU的序列号().Trim());
  205. xmlwriter.WriteEndElement();
  206.  
  207. // 总的投标文件的版本号
  208. xmlwriter.WriteStartElement("Version");
  209. xmlwriter.WriteString(String.IsNullOrEmpty(UICommon.tbFileInfo.Str计税方法) ? "3.0" : "3.1");
  210. xmlwriter.WriteEndElement();
  211.  
  212. xmlwriter.WriteStartElement("Ehash");
  213. xmlwriter.WriteString(CommonFunction.ComputeSHA1(str加密后PBTB文件));
  214. xmlwriter.WriteEndElement();
  215.  
  216. xmlwriter.WriteStartElement("Yhash");
  217. xmlwriter.WriteString(UICommon.tbFileInfo.Str一次加密后的原文Hash值);
  218. xmlwriter.WriteEndElement();
  219.  
  220. xmlwriter.WriteEndElement();
  221. xmlwriter.WriteEndDocument();
  222. xmlwriter.Flush();
  223. xmlwriter.Close();
  224.  
  225. SplashScreen.SetTitleString("正在验证投标文件的加密信息......");
  226. if (!UICommon.验证加密文件是否一致(str投标文件NTF, str加密后PBTB文件))
  227. {
  228. TrueLoreMessageBox.ShowMessage("投标文件的加密信息E不一致,请重新生成!");
  229. return false;
  230. }
  231. #endregion
  232.  
  233. XmlDocument xmlDocTemp = new XmlDocument();
  234. xmlDocTemp.Load(UICommon.tbFileInfo.Str投标文件的临时文件);
  235. XmlNode xnTBFileHash = xmlDocTemp.DocumentElement.SelectSingleNode("TBFileHash");
  236. XmlAttribute xaPBTBENCHash = xnTBFileHash.OwnerDocument.CreateAttribute("PBTBENCHash");
  237. xnTBFileHash.Attributes.Append(xaPBTBENCHash);
  238. xaPBTBENCHash.Value = CommonFunction.ComputeSHA1(str加密后PBTB文件);
  239. xmlDocTemp.Save(UICommon.tbFileInfo.Str投标文件的临时文件);
  240. xmlDocTemp = null;
Add Comment
Please, Sign In to add comment