.net Xml加密解密操作
生成密钥的方法:
/// <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;
using System.Security.Cryptography.Xml;
添加.net引用:System.Security.dll .net2.0及以上支持
#region 操作xml文件(加密解密xml;读取加密xml)
private static string rsaKeyname = "wqras";//
//以下加密解密,密钥 就是上面getRSAKey方法生成的xml文件里面的内容了
private static string rsaKey_Encrypt = "<RSAKeyValue><Modulus>tovGC4FG9lfxrDu4+GZ9TzgdAlK4w57cOec/z4y87+2OVwPvd3eGe34a24/Q1eJBaQGHPJBq00LstnOJH19B2F+t7eHR7/WYYvpB98RPWhhwhCdirBs3scTNs3fLXmTrQf/5Xgy2X7TAjgbdQ4lEvG2VkbtcHZLh8+q3CH04lo8=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
private static string rsaKey_Decrypt = "<RSAKeyValue><Modulus>tovGC4FG9lfxrDu4+GZ9TzgdAlK4w57cOec/z4y87+2OVwPvd3eGe34a24/Q1eJBaQGHPJBq00LstnOJH19B2F+t7eHR7/WYYvpB98RPWhhwhCdirBs3scTNs3fLXmTrQf/5Xgy2X7TAjgbdQ4lEvG2VkbtcHZLh8+q3CH04lo8=</Modulus><Exponent>AQAB</Exponent><P>/IZ7CU8o164bGlq6pNQvV8nx/Gw/5wALtZpE280tCTmlD6M5Wl8Bjketwqdek+Nh6qRlrdwOpFUlCxZ3girflQ==</P><Q>uQ7KhsO+hTEPV316uYKPzWQr0es++TF62bOcQGitw6hv+IVI20MuPYZ17D04Nne7nmLkFQVu6+2jQqtPATRkkw==</Q><DP>eq9bV0p+LUsJH+S0iSANYDlct6Zf5XrANZqdmaw1FSZMayyB0MYXm2h3ovptmKwABl+Yhr9C3dQAC0L/DN6HgQ==</DP><DQ>K9XZG3sakipA3BSZEYBf1+M2jg8PZ6/UzeTBynABWSt4+oF39JhBR8ml/UOzIRPTmX0LUf9reu9bkNtLZ5mliQ==</DQ><InverseQ>PGKrRI66SftCvW3qWL1gJ2yqSL9qU+SDoc1TU54dLD5swTEFwEU03kw39M6rF4YJ3XAgA7ansreIsfvRkpy82A==</InverseQ><D>qxvzpN8mHE2tLEvDA5xWQ4aOspnFtSBYwDICf1Ml2yRq8yeuNOal+WXoWPzCvWna9EnJcTzR1Xt7FT7RPsX0mfpRKJ2PmshFfjdoIx+gW+Y/zF4U+u3Dx4bbbNwKFxLRLwSQEzHVK1+Is6QIZiyCIj2NHOtOTmSGvMPgpVpEmlk=</D></RSAKeyValue>"; //读取加密过的xml文档
private static XmlDocument GetDecryptXmlDoc(string xmlpath)
{
XmlDocument xmlDoc = new XmlDocument();
try
{
xmlDoc.PreserveWhitespace = true;
xmlDoc.Load(xmlpath);
}
catch (Exception e)
{
return xmlDoc;
}
RSA rsaKey = new RSACryptoServiceProvider();
try
{
rsaKey.FromXmlString(rsaKey_Decrypt);
//解密xml文档
Decrypt(xmlDoc, rsaKey, rsaKeyname);
//xmlDoc.Save("test.xml");
}
catch (Exception e)
{ }
finally
{
rsaKey.Clear();
}
return xmlDoc;
}
//加密xml
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", rsaKey, 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, rsaKey, 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, RSA Alg, 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
.net Xml加密解密操作的更多相关文章
- JAVA和PYTHON同时实现AES的加密解密操作---且生成的BASE62编码一致
终于有机会生产JAVA的东东了. 有点兴奋. 花了一天搞完.. java(关键key及算法有缩减): package com.security; import javax.crypto.Cipher; ...
- SpringBoot框架中,使用过滤器进行加密解密操作(一)
一.基本说明 1.请求方式:POST请求.注解@PostMapping 2.入参格式:json串 3.出参格式:json串(整体加密) 4.使用Base64进行加密解密.具体的加密方式,可以根据需求自 ...
- RSA加密解密操作
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- ASP.NET - URL中参数加密解密操作
效果: 代码: using System; using System.Text; using System.IO; using System.Security.Cryptography; public ...
- C#获取CPU与网卡硬盘序列号及Base64和DES加密解密操作类
public class RegisterHelp { /// <summary> /// CPU /// </summary> /// <returns>< ...
- ASP.NET常用技术之加密解密
在开发项目中有许多数据需要我们进行加密解密操作,这里介绍几个加密解密的方法. 一:MD5加密 MD5加密是一种单向的加密算法,它只能加密,加密后不能进行逆向解密操作,常用于数字签名和加密用户密码. 下 ...
- [加密解密]CryptoAPI简介
CryptoAPI概述 Windows CryptoAPI是Microsoft 公司提出的安全加密应用服务框架,也是PKI推荐使用的加密 API.它提供了在Win32 环境下使用认证.编码.加密和签名 ...
- RSA加密解密与加签验签
RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.1987年7月首次在美国公布 ...
- 【krpano】加密XML手动解密分析
krpano允许对XML文件进行加密,对XML进行相应的保护.加密分为两种,第一种为公共加密,即允许其他krpano全景读取该XML,而另一种为私有加密,仅允许加密的用户读取XML.两种加密方式的算法 ...
随机推荐
- Django的form组件基本使用——简单校验
from django.contrib import admin from django.urls import path from app01 import views urlpatterns = ...
- Redis的配置文件redis.conf的解析
1.redis的配置文件为redis.conf 2.redis配置文件redis.conf中关于网络的配置 3.redis配置文件redis.conf中的日志配置 4.redis配置文件redis.c ...
- element后端管理布局
<template> <el-container> <el-header> <Header></Header> <span class ...
- 远程线程注入DLL
远程线程注入 0x00 前言 远程线程注入是一种经典的DLL注入技术.其实就是指一个新进程中另一个进程中创建线程的技术. 0x01 介绍 1.远程线程注入原理 画了一个图大致理解了下远程线程注入dll ...
- Windows Phone 页面之间参数传递方法
目前对WP7开发正在研究,对页面之间参数传递进行了一个小总结,有不正确的地方,欢迎大家指正.. WP7编程采用的技术是Silverlight,页面之间参数传递的方式主要有 通过NavigationCo ...
- 致Python初学者,Python常用的基础函数你知道有哪些吗?
Python基础函数: print()函数:打印字符串 raw_input()函数:从用户键盘捕获字符 len()函数:计算字符长度 format(12.3654,'6.2f'/'0.3%')函数:实 ...
- 【PHP数据结构】线性表?顺序表?链表?别再傻傻分不清楚
遵从所有教材以及各类数据结构相关的书书籍,我们先从线性表开始入门.今天这篇文章更偏概念,是关于有线性表的一个知识点的汇总. 上文说过,物理结构是用于确定数据以何种方式存储的.其他的数据结构(树.图). ...
- jquery .play()报错is not a function
报错原因:play()方法属于DOM对象方法,$('#audio')为jquery对象解决办法:将jquery对象转换为DOM对象首先打印jquery对象$('#audio') 两种转换方式将一个jQ ...
- Orchard Core Framework Samples
解决方案包含内容 多租户应用 一个ASP.NET Core MVC应用程序,它引用模块项目,并为两个启用了不同模块的租户提供支持. 此Web应用程序的主页提供了更多信息,并链接到两个租户和模块端点.租 ...
- js中针对dom的crud
1.怎样添加.移除.移动.复制.创建和查找节点? 1)创建新节点 createDocumentFragment() //创建一个DOM片段 createElement() //创建一个具体的元素 cr ...