Alternative à CryptoConfig.AddAlgorithm sous .Net 3.5
Bonjour
Je code dans un environnement où .NET 3.5 est la plus récente version que je peux utiliser.
Mon code, ci-dessous, permet de signer digitalement mon fichier xml (Sign XML Documents with Digital Signatures) mais le problème que je rencontre c'est que la méthode AddAlgorithm n'est pas reconnue dans mon code. Je pense que c'est à cause de la version 3.5 du .Net et puisque je ne peux pas utiliser une version plus récente. Pouvez-vous m'aider à trouver une alternative à cette fonction ?
Par avance Merci,
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
/*
Microsoft SQL Server Integration Services Script Task
Write scripts using Microsoft Visual C# 2008.
The ScriptMain is the entry point class of the script.
*/
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.IO;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Security.Cryptography.Xml;
using System.Xml;
using System.Deployment.Internal.CodeSigning;
namespace ST_4ea4f9cf147148638ca6e65c188178e7.csproj
{
[System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]
public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
{
#region VSTA generated code
enum ScriptResults
{
Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
};
#endregion
public void Main()
{
//try
{
// Create a new XML document.
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("C:\\Users\\A393320\\ds\\test.xml");
MessageBox.Show("XML file signed.");
X509Certificate2 uidCert = new X509Certificate2("C:\\Users\\XXXX\\ds\\YYYYYY.p12", "CCCCCCC", X509KeyStorageFlags.DefaultKeySet);
MessageBox.Show("XML file signed 2.");
// Load an XML file into the XmlDocument object.
xmlDoc.Load("C:\\Users\\XXXXX\\ds\\test.xml");
xmlDoc.PreserveWhitespace = true;
// Sign the XML document.
SignXml(xmlDoc, uidCert);
MessageBox.Show("XML file signed.");
// Save the document.
xmlDoc.Save("C:\\Users\\XXXXX\\dstest-signed.xml");
}
/* catch (Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
System.Console.ReadLine();
}*/
Dts.TaskResult = (int)ScriptResults.Success;
}
public static void SignXml(XmlDocument xmlDoc, X509Certificate2 uidCert)
{
RSACryptoServiceProvider rsaKey = (RSACryptoServiceProvider)uidCert.PrivateKey;
// Check arguments.
if (xmlDoc == null)
throw new ArgumentException("xmlDoc");
if (rsaKey == null)
throw new ArgumentException("Key");
CryptoConfig.AddAlgorithm(typeof(RSAPKCS1SHA256SignatureDescription), "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256");
// Create a SignedXml object.
SignedXml signedXml = new SignedXml(xmlDoc);
// Add the key to the SignedXml document.
signedXml.SigningKey = rsaKey;
// 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();
KeyInfoX509Data clause = new KeyInfoX509Data();
clause.AddSubjectName(uidCert.Subject);
clause.AddCertificate(uidCert);
keyInfo.AddClause(clause);
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();
System.Console.WriteLine(signedXml.GetXml().InnerXml);
// Append the element to the XML document.
xmlDoc.DocumentElement.AppendChild(xmlDoc.ImportNode(xmlDigitalSignature, true));
}
}
} |
Le message d'erreur:
Code:
1 2
|
Error 1 'System.Security.Cryptography.CryptoConfig' does not contain a definition for 'AddAlgorithm' C:\Users\XXXXX\AppData\Local\Temp\SSIS\aaaf63514b7b4e219dd743fe40548159\ScriptMain.cs 85 26 st_4ea4f9cf147148638ca6e65c188178e7 |