Encrytion.cs 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Security.Cryptography;
  6. using System.Threading.Tasks;
  7. using System.Xml;
  8. namespace NcGamesWebView.Extensions
  9. {
  10. public static class Encryption
  11. {
  12. public static void FromXmlFile(this RSA rsa, string xmlFilePath)
  13. {
  14. RSAParameters parameters = new RSAParameters();
  15. XmlDocument xmlDoc = new XmlDocument();
  16. xmlDoc.LoadXml(File.ReadAllText(xmlFilePath));
  17. if (xmlDoc.DocumentElement.Name.Equals("RSAKeyValue"))
  18. {
  19. foreach (XmlNode node in xmlDoc.DocumentElement.ChildNodes)
  20. {
  21. switch (node.Name)
  22. {
  23. case "Modulus": parameters.Modulus = (string.IsNullOrEmpty(node.InnerText) ? null : Convert.FromBase64String(node.InnerText)); break;
  24. case "Exponent": parameters.Exponent = (string.IsNullOrEmpty(node.InnerText) ? null : Convert.FromBase64String(node.InnerText)); break;
  25. case "P": parameters.P = (string.IsNullOrEmpty(node.InnerText) ? null : Convert.FromBase64String(node.InnerText)); break;
  26. case "Q": parameters.Q = (string.IsNullOrEmpty(node.InnerText) ? null : Convert.FromBase64String(node.InnerText)); break;
  27. case "DP": parameters.DP = (string.IsNullOrEmpty(node.InnerText) ? null : Convert.FromBase64String(node.InnerText)); break;
  28. case "DQ": parameters.DQ = (string.IsNullOrEmpty(node.InnerText) ? null : Convert.FromBase64String(node.InnerText)); break;
  29. case "InverseQ": parameters.InverseQ = (string.IsNullOrEmpty(node.InnerText) ? null : Convert.FromBase64String(node.InnerText)); break;
  30. case "D": parameters.D = (string.IsNullOrEmpty(node.InnerText) ? null : Convert.FromBase64String(node.InnerText)); break;
  31. }
  32. }
  33. }
  34. else
  35. {
  36. throw new Exception("Invalid XML RSA key.");
  37. }
  38. rsa.ImportParameters(parameters);
  39. }
  40. public static void ToXmlFile(this RSA rsa, bool includePrivateParameters, string xmlFilePath)
  41. {
  42. RSAParameters parameters = rsa.ExportParameters(includePrivateParameters);
  43. File.WriteAllText(xmlFilePath,
  44. string.Format("<RSAKeyValue><Modulus>{0}</Modulus><Exponent>{1}</Exponent><P>{2}</P><Q>{3}</Q><DP>{4}</DP><DQ>{5}</DQ><InverseQ>{6}</InverseQ><D>{7}</D></RSAKeyValue>",
  45. parameters.Modulus != null ? Convert.ToBase64String(parameters.Modulus) : null,
  46. parameters.Exponent != null ? Convert.ToBase64String(parameters.Exponent) : null,
  47. parameters.P != null ? Convert.ToBase64String(parameters.P) : null,
  48. parameters.Q != null ? Convert.ToBase64String(parameters.Q) : null,
  49. parameters.DP != null ? Convert.ToBase64String(parameters.DP) : null,
  50. parameters.DQ != null ? Convert.ToBase64String(parameters.DQ) : null,
  51. parameters.InverseQ != null ? Convert.ToBase64String(parameters.InverseQ) : null,
  52. parameters.D != null ? Convert.ToBase64String(parameters.D) : null)
  53. );
  54. }
  55. }
  56. }