.net Xml加密解密操作
发布时间:2020-12-16 23:05:03 所属栏目:百科 来源:网络整理
导读:生成密钥的方法: /// summary 生成RSA加密 解密的 密钥 /// 生成的key就是 方法EncryptByRSA与DecryptByRSA用的key了 /// /summary /// param name="path" 要生成的密钥文件的路径(文件夹) /param public static void getRSAKey( string path) { RSACryptoSe
生成密钥的方法: /// <summary>生成RSA加密 解密的 密钥 /// 生成的key就是 方法EncryptByRSA与DecryptByRSA用的key了 /// </summary> /// <param name="path">要生成的密钥文件的路径(文件夹)</param> public static void getRSAKey(string path) { RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); string datetimestr = System.DateTime.Now.ToString("yyyyMMddHHmmss"); using (StreamWriter writer = new StreamWriter("RSA解密_PrivateKey_" + datetimestr + ".xml")) //这个文件要保密... { writer.WriteLine(rsa.ToXmlString(true)); } using (StreamWriter writer = new StreamWriter("RSA加密_PublicKey_" + datetimestr + ".xml")) { writer.WriteLine(rsa.ToXmlString(false)); } } ? using System.Security.Cryptography; 添加.net引用:System.Security.dll? .net2.0及以上支持 #region 操作xml文件(加密解密xml;读取加密xml) private static string rsaKeyname = "wqras";// public static void EncryptMyXml(string xmlpath) { XmlDocument xmlDoc = new XmlDocument(); try { xmlDoc.PreserveWhitespace = true; xmlDoc.Load(xmlpath); } catch (Exception e) { return; } RSA rsaKey = new RSACryptoServiceProvider(); try { rsaKey.FromXmlString(rsaKey_Encrypt); //加密某节点 Config Encrypt(xmlDoc,"Config",rsaKeyname); xmlDoc.Save(xmlpath); } catch (Exception e) { } finally { rsaKey.Clear(); } } //解密xml public static void DecryptMyXml(string xmlpath) { XmlDocument xmlDoc = new XmlDocument(); try { xmlDoc.PreserveWhitespace = true; xmlDoc.Load(xmlpath); } catch (Exception e) { return; } RSA rsaKey = new RSACryptoServiceProvider(); try { rsaKey.FromXmlString(rsaKey_Decrypt); //解密 Decrypt(xmlDoc,rsaKeyname); xmlDoc.Save(xmlpath); } catch (Exception e) { } finally { rsaKey.Clear(); } } //xml加密 public static void Encrypt(XmlDocument Doc,string ElementToEncrypt,RSA Alg,string KeyName) { // Check the arguments. if (Doc == null) throw new ArgumentNullException("Doc"); if (ElementToEncrypt == null) throw new ArgumentNullException("ElementToEncrypt"); if (Alg == null) throw new ArgumentNullException("Alg"); //////////////////////////////////////////////// // Find the specified element in the XmlDocument // object and create a new XmlElemnt object. //////////////////////////////////////////////// XmlElement elementToEncrypt = Doc.GetElementsByTagName(ElementToEncrypt)[0] as XmlElement; // Throw an XmlException if the element was not found. if (elementToEncrypt == null) { throw new XmlException("The specified element was not found"); } ////////////////////////////////////////////////// // Create a new instance of the EncryptedXml class // and use it to encrypt the XmlElement with the // a new random symmetric key. ////////////////////////////////////////////////// // Create a 256 bit Rijndael key. RijndaelManaged sessionKey = new RijndaelManaged(); sessionKey.KeySize = 256; EncryptedXml eXml = new EncryptedXml(); byte[] encryptedElement = eXml.EncryptData(elementToEncrypt,sessionKey,false); //////////////////////////////////////////////// // Construct an EncryptedData object and populate // it with the desired encryption information. //////////////////////////////////////////////// EncryptedData edElement = new EncryptedData(); edElement.Type = EncryptedXml.XmlEncElementUrl; // Create an EncryptionMethod element so that the // receiver knows which algorithm to use for decryption. edElement.EncryptionMethod = new EncryptionMethod(EncryptedXml.XmlEncAES256Url); // Encrypt the session key and add it to an EncryptedKey element. EncryptedKey ek = new EncryptedKey(); byte[] encryptedKey = EncryptedXml.EncryptKey(sessionKey.Key,Alg,false); ek.CipherData = new CipherData(encryptedKey); ek.EncryptionMethod = new EncryptionMethod(EncryptedXml.XmlEncRSA15Url); // Set the KeyInfo element to specify the // name of the RSA key. // Create a new KeyInfo element. edElement.KeyInfo = new KeyInfo(); // Create a new KeyInfoName element. KeyInfoName kin = new KeyInfoName(); // Specify a name for the key. kin.Value = KeyName; // Add the KeyInfoName element to the // EncryptedKey object. ek.KeyInfo.AddClause(kin); // Add the encrypted key to the // EncryptedData object. edElement.KeyInfo.AddClause(new KeyInfoEncryptedKey(ek)); // Add the encrypted element data to the // EncryptedData object. edElement.CipherData.CipherValue = encryptedElement; //////////////////////////////////////////////////// // Replace the element from the original XmlDocument // object with the EncryptedData element. //////////////////////////////////////////////////// EncryptedXml.ReplaceElement(elementToEncrypt,edElement,false); } //xml解密 public static void Decrypt(XmlDocument Doc,string KeyName) { // Check the arguments. if (Doc == null) throw new ArgumentNullException("Doc"); if (Alg == null) throw new ArgumentNullException("Alg"); if (KeyName == null) throw new ArgumentNullException("KeyName"); // Create a new EncryptedXml object. EncryptedXml exml = new EncryptedXml(Doc); // Add a key-name mapping. // This method can only decrypt documents // that present the specified key name. exml.AddKeyNameMapping(KeyName,Alg); // Decrypt the element. exml.DecryptDocument(); } #endregion ? 参考资料:https://docs.microsoft.com/zh-cn/dotnet/api/system.security.cryptography.xml.encryptedxml?view=netframework-2.0 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |