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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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