IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Alternative à CryptoConfig.AddAlgorithm sous .Net 3.5


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 101
    Par défaut 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 : 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

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    En effet la méthode AddAlgorithm a été ajoutée dans le Framework 4.

    En substitution tu peux utiliser le projet CLR Security disponible sur CodePlex. En utilisant la classe Security.Cryptography.CryptoConfig2, tu pourras retrouver la méthode AddAlgorithm.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

Discussions similaires

  1. Quelles sont les tendances sous .NET ?
    Par Louis-Guillaume Morand dans le forum Général Dotnet
    Réponses: 23
    Dernier message: 25/11/2008, 12h16
  2. Plantage de la version Release sous .NET
    Par mastergoddot dans le forum Visual C++
    Réponses: 4
    Dernier message: 22/05/2007, 15h46
  3. Portage d'application CLX sous .NET
    Par Phébus dans le forum Delphi
    Réponses: 3
    Dernier message: 11/04/2007, 20h38
  4. Réponses: 11
    Dernier message: 03/04/2007, 13h34
  5. Gravure de CD avec IMAPI en C++ sous .net
    Par ReZeDa dans le forum MFC
    Réponses: 6
    Dernier message: 08/04/2004, 23h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo