本文整理汇总了C#中System.Security.Cryptography.Xml.XmlDsigEnvelopedSignatureTransform类的典型用法代码示例。如果您正苦于以下问题:C# XmlDsigEnvelopedSignatureTransform类的具体用法?C# XmlDsigEnvelopedSignatureTransform怎么用?C# XmlDsigEnvelopedSignatureTransform使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
XmlDsigEnvelopedSignatureTransform类属于System.Security.Cryptography.Xml命名空间,在下文中一共展示了XmlDsigEnvelopedSignatureTransform类的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C#代码示例。
示例1: Main
//
// This example signs an XML file using an
// envelope signature. It then verifies the
// signed XML.
//
using System;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Security.Cryptography.Xml;
using System.Text;
using System.Xml;
public class SignVerifyEnvelope
{
public static void Main(String[] args)
{
try
{
// Generate a signing key.
RSACryptoServiceProvider Key = new RSACryptoServiceProvider();
// Create an XML file to sign.
CreateSomeXml("Example.xml");
Console.WriteLine("New XML file created.");
// Sign the XML that was just created and save it in a
// new file.
SignXmlFile("Example.xml", "SignedExample.xml", Key);
Console.WriteLine("XML file signed.");
// Verify the signature of the signed XML.
Console.WriteLine("Verifying signature...");
bool result = VerifyXmlFile("SignedExample.xml");
// Display the results of the signature verification to \
// the console.
if(result)
{
Console.WriteLine("The XML signature is valid.");
}
else
{
Console.WriteLine("The XML signature is not valid.");
}
}
catch(CryptographicException e)
{
Console.WriteLine(e.Message);
}
}
// Sign an XML file and save the signature in a new file.
public static void SignXmlFile(string FileName, string SignedFileName, RSA Key)
{
// Create a new XML document.
XmlDocument doc = new XmlDocument();
// Format the document to ignore white spaces.
doc.PreserveWhitespace = false;
// Load the passed XML file using it's name.
doc.Load(new XmlTextReader(FileName));
// Create a SignedXml object.
SignedXml signedXml = new SignedXml(doc);
// Add the key to the SignedXml document.
signedXml.SigningKey = Key;
// Create a reference to be signed.
Reference reference = new Reference();
reference.Uri = "";
// Add an enveloped transformation to the reference.
XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();
reference.AddTransform(env);
// Add the reference to the SignedXml object.
signedXml.AddReference(reference);
// Add an RSAKeyValue KeyInfo (optional; helps recipient find key to validate).
KeyInfo keyInfo = new KeyInfo();
keyInfo.AddClause(new RSAKeyValue((RSA)Key));
signedXml.KeyInfo = keyInfo;
// Compute the signature.
signedXml.ComputeSignature();
// Get the XML representation of the signature and save
// it to an XmlElement object.
XmlElement xmlDigitalSignature = signedXml.GetXml();
// Append the element to the XML document.
doc.DocumentElement.AppendChild(doc.ImportNode(xmlDigitalSignature, true));
if (doc.FirstChild is XmlDeclaration)
{
doc.RemoveChild(doc.FirstChild);
}
// Save the signed XML document to a file specified
// using the passed string.
XmlTextWriter xmltw = new XmlTextWriter(SignedFileName, new UTF8Encoding(false));
doc.WriteTo(xmltw);
xmltw.Close();
}
// Verify the signature of an XML file and return the result.
public static Boolean VerifyXmlFile(String Name)
{
// Create a new XML document.
XmlDocument xmlDocument = new XmlDocument();
// Format using white spaces.
xmlDocument.PreserveWhitespace = true;
// Load the passed XML file into the document.
xmlDocument.Load(Name);
// Create a new SignedXml object and pass it
// the XML document class.
SignedXml signedXml = new SignedXml(xmlDocument);
// Find the "Signature" node and create a new
// XmlNodeList object.
XmlNodeList nodeList = xmlDocument.GetElementsByTagName("Signature");
// Load the signature node.
signedXml.LoadXml((XmlElement)nodeList[0]);
// Check the signature and return the result.
return signedXml.CheckSignature();
}
// Create example data to sign.
public static void CreateSomeXml(string FileName)
{
// Create a new XmlDocument object.
XmlDocument document = new XmlDocument();
// Create a new XmlNode object.
XmlNode node = document.CreateNode(XmlNodeType.Element, "", "MyElement", "samples");
// Add some text to the node.
node.InnerText = "Example text to be signed.";
// Append the node to the document.
document.AppendChild(node);
// Save the XML document to the file name specified.
XmlTextWriter xmltw = new XmlTextWriter(FileName, new UTF8Encoding(false));
document.WriteTo(xmltw);
xmltw.Close();
}
}
开发者ID:.NET开发者,项目名称:System.Security.Cryptography.Xml,代码行数:155,代码来源:XmlDsigEnvelopedSignatureTransform
示例2: Main
//引入命名空间
using System;
using System.IO;
using System.Xml;
using System.Security.Cryptography;
using System.Security.Cryptography.Xml;
using System.Security.Cryptography.X509Certificates;
class Class1
{
private static string Certificate = "..\\..\\my509.cer";
[STAThread]
static void Main(string[] args)
{
// Encrypt an XML message
XmlDocument productsXml = LoadProducts();
ShowTransformProperties(productsXml);
SignDocument(ref productsXml);
ShowTransformProperties(productsXml);
// Use XmlDsigEnvelopedSignatureTransform to resolve a Uri.
Uri baseUri = new Uri("http://www.contoso.com");
string relativeUri = "xml";
Uri absoluteUri = ResolveUris(baseUri, relativeUri);
Console.WriteLine("This sample completed successfully; " +
"press Enter to exit.");
Console.ReadLine();
}
// Encrypt the text in the specified XmlDocument.
private static void ShowTransformProperties(XmlDocument xmlDoc)
{
XmlDsigEnvelopedSignatureTransform xmlTransform =
new XmlDsigEnvelopedSignatureTransform();
// Ensure the transform is using the proper algorithm.
xmlTransform.Algorithm =
SignedXml.XmlDsigEnvelopedSignatureTransformUrl;
// Retrieve the XML representation of the current transform.
XmlElement xmlInTransform = xmlTransform.GetXml();
Console.WriteLine("\nXml representation of the current transform: ");
Console.WriteLine(xmlInTransform.OuterXml);
// Retrieve the valid input types for the current transform.
Type[] validInTypes = xmlTransform.InputTypes;
// Verify the xmlTransform can accept the XMLDocument as an
// input type.
for (int i=0; i<validInTypes.Length; i++)
{
if (validInTypes[i] == xmlDoc.GetType())
{
// Load the document into the transfrom.
xmlTransform.LoadInput(xmlDoc);
bool IncludeComments = true;
// This transform is created for demonstration purposes.
XmlDsigEnvelopedSignatureTransform secondTransform =
new XmlDsigEnvelopedSignatureTransform(IncludeComments);
string classDescription = secondTransform.ToString();
// This call does not perform as expected.
// An enveloped signature has no inner XML elements
secondTransform.LoadInnerXml(xmlDoc.SelectNodes("//."));
break;
}
}
Type[] validOutTypes = xmlTransform.OutputTypes;
for (int i=validOutTypes.Length-1; i >= 0; i--)
{
if (validOutTypes[i] == typeof(System.Xml.XmlDocument))
{
try
{
Type xmlDocumentType = typeof(System.Xml.XmlDocument);
XmlDocument xmlDocumentOutput = (XmlDocument)
xmlTransform.GetOutput(xmlDocumentType);
// Display to the console the Xml before and after
// encryption.
Console.WriteLine("Result of the GetOutput method call" +
" from the current transform: " +
xmlDocumentOutput.OuterXml);
}
catch (Exception ex)
{
Console.WriteLine("Unexpected exception caught: " +
ex.ToString());
}
break;
}
else if (validOutTypes[i] == typeof(System.Xml.XmlNodeList))
{
try
{
Type xmlNodeListType = typeof(System.Xml.XmlNodeList);
XmlNodeList xmlNodes = (XmlNodeList)
xmlTransform.GetOutput(xmlNodeListType);
// Display to the console the Xml before and after
// encryption.
Console.WriteLine("Encoding the following message: " +
xmlDoc.InnerText);
Console.WriteLine("Nodes of the XmlNodeList retrieved " +
"from GetOutput:");
for (int j=0; j < xmlNodes.Count; j++)
{
Console.WriteLine("Node " + j +
" has the following name: " +
xmlNodes.Item(j).Name +
" and the following InnerXml: " +
xmlNodes.Item(j).InnerXml);
}
}
catch (Exception ex)
{
Console.WriteLine("Unexpected exception caught: " +
ex.ToString());
}
break;
}
else
{
object outputObject = xmlTransform.GetOutput();
}
}
}
// Create an XML document describing various products.
private static XmlDocument LoadProducts()
{
XmlDocument xmlDoc = new XmlDocument();
string contosoProducts = "<PRODUCTS>";
contosoProducts += "<PRODUCT><ID>123</ID>";
contosoProducts += "<DESCRIPTION>Router</DESCRIPTION></PRODUCT>";
contosoProducts += "<PRODUCT><ID>456</ID>";
contosoProducts += "<DESCRIPTION>Keyboard</DESCRIPTION></PRODUCT>";
contosoProducts += "<PRODUCT><ID>789</ID>";
contosoProducts += "<DESCRIPTION>Monitor</DESCRIPTION></PRODUCT>";
contosoProducts += "</PRODUCTS>";
xmlDoc.LoadXml(contosoProducts);
return xmlDoc;
}
// Create a signature and add it to the specified document.
private static void SignDocument(ref XmlDocument xmlDoc)
{
// Generate a signing key.
RSACryptoServiceProvider Key = new RSACryptoServiceProvider();
// Create a SignedXml object.
SignedXml signedXml = new SignedXml(xmlDoc);
// Add the key to the SignedXml document.
signedXml.SigningKey = Key;
// Create a reference to be signed.
Reference reference = new Reference();
reference.Uri = "";
// Add an enveloped transformation to the reference.
reference.AddTransform(new XmlDsigEnvelopedSignatureTransform());
// Add the reference to the SignedXml object.
signedXml.AddReference(reference);
try
{
// Create a new KeyInfo object.
KeyInfo keyInfo = new KeyInfo();
// Load the X509 certificate.
X509Certificate MSCert =
X509Certificate.CreateFromCertFile(Certificate);
// Load the certificate into a KeyInfoX509Data object
// and add it to the KeyInfo object.
keyInfo.AddClause(new KeyInfoX509Data(MSCert));
// Add the KeyInfo object to the SignedXml object.
signedXml.KeyInfo = keyInfo;
}
catch (FileNotFoundException ex)
{
Console.WriteLine("Unable to locate the following file: " +
Certificate);
}
// Compute the signature.
signedXml.ComputeSignature();
// Add the signature branch to the original tree so it is enveloped.
xmlDoc.DocumentElement.AppendChild(signedXml.GetXml());
}
// Resolve the specified base and relative Uri's .
private static Uri ResolveUris(Uri baseUri, string relativeUri)
{
XmlUrlResolver xmlResolver = new XmlUrlResolver();
xmlResolver.Credentials =
System.Net.CredentialCache.DefaultCredentials;
XmlDsigEnvelopedSignatureTransform xmlTransform =
new XmlDsigEnvelopedSignatureTransform();
xmlTransform.Resolver = xmlResolver;
Uri absoluteUri = xmlResolver.ResolveUri(baseUri, relativeUri);
if (absoluteUri != null)
{
Console.WriteLine(
"\nResolved the base Uri and relative Uri to the following:");
Console.WriteLine(absoluteUri.ToString());
}
else
{
Console.WriteLine(
"Unable to resolve the base Uri and relative Uri");
}
return absoluteUri;
}
}
//
开发者ID:.NET开发者,项目名称:System.Security.Cryptography.Xml,代码行数:237,代码来源:XmlDsigEnvelopedSignatureTransform 输出:
Xml representation of the current transform:
Result of the GetOutput method call from the current transform:
123Router
456Keyboard789
Monitor
Unable to load the following file: ..\\my509.cer
Xml representation of the current transform:
Result of the GetOutput method call from the current transform:
123Router
456Keyboard789
Monitor
KvPW6HUiIUMEDS0YSoT
gpo2JPbA=c/njCGDru/a
WAmWG83I+mWO040xOzxvmNx0b0o8ZyPc9j5VwApdAt103OGBtB1H6EkOvt7Ekw+PVuUo8m5LzLP
yaTxUDMbb2kZZ5itSkGD4rmMUMUMuzrkAoquJZjxeOydBJ2CMehV2rE3RMPLIwRX176DZVy5JKU
6Cb7PR2Rpw=
Resolved the base Uri and relative Uri to the following:
http://www.contoso.com/xml
This sample completed successfully; press Enter to exit.
注:本文中的System.Security.Cryptography.Xml.XmlDsigEnvelopedSignatureTransform类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论