का उपयोग कर रहा विधि का उपयोग कर रहा नीचे एक्सएमएल दस्तावेजों पर हस्ताक्षर करने के लिए एक XML दस्तावेज साइन इन करना:RSA-SHA256 हस्ताक्षर विधि मुद्दा
public static XmlDocument SignDocument(XmlDocument doc)
{
string signatureCanonicalizationMethod = "http://www.w3.org/2001/10/xml-exc-c14n#";
string signatureMethod = @"http://www.w3.org/2001/04/xmldsig-more#rsa-sha256";
string digestMethod = @"http://www.w3.org/2001/04/xmlenc#sha256";
string signatureReferenceURI = "#_73e63a41-156d-4fda-a26c-8d79dcade713";
CryptoConfig.AddAlgorithm(typeof(RSAPKCS1SHA256SignatureDescription), signatureMethod);
var signingCertificate = GetCertificate();
SignedXml signer = new SignedXml(doc);
signer.SigningKey = signingCertificate.PrivateKey;
signer.KeyInfo = new KeyInfo();
signer.KeyInfo.AddClause(new KeyInfoX509Data(signingCertificate));
signer.SignedInfo.CanonicalizationMethod = signatureCanonicalizationMethod;
signer.SignedInfo.SignatureMethod = signatureMethod;
XmlDsigEnvelopedSignatureTransform envelopeTransform = new XmlDsigEnvelopedSignatureTransform();
XmlDsigExcC14NTransform cn14Transform = new XmlDsigExcC14NTransform();
Reference signatureReference = new Reference();
signatureReference.Uri = signatureReferenceURI;
signatureReference.AddTransform(envelopeTransform);
signatureReference.AddTransform(cn14Transform);
signatureReference.DigestMethod = digestMethod;
signer.AddReference(signatureReference);
signer.ComputeSignature();
XmlElement signatureElement = signer.GetXml();
doc.DocumentElement.AppendChild(signer.GetXml());
return doc;
}
private static X509Certificate2 GetCertificate()
{
X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
X509Certificate2 card = null;
foreach (X509Certificate2 cert in store.Certificates)
{
if (!cert.HasPrivateKey) continue;
if (cert.Thumbprint.Equals("a_certain_thumb_print", StringComparison.OrdinalIgnoreCase))
{
card = cert;
break;
}
}
store.Close();
return card;
}
जब गणना करने के लिए कोशिश कर रहा प्रकार System.Security.Cryptography.CryptographicException की एक अपवाद उत्पन्न कर रहा है त्रुटि संदेश के साथ हस्ताक्षर अमान्य एल्गोरिदम निर्दिष्ट। कोई विचार?
मशीन: Windows Server 2008 R2
नेट फ्रेमवर्क: 4.0।
आईडीई: विजुअल स्टूडियो 2010.
के अनुसार .NET में लागू नहीं है मैं इस मुद्दे (धन्यवाद फिलिप) का समाधान इस प्रकार है: /* (के बाद वर signingCertificate = GetCertificate कोड की निम्न पंक्तियाँ जोड़ें); */ सीएसपी पैरामीटर cspParams = नया सीएसपी पैरामीटर (24); cspParams.KeyContainerName = "XML_DISG_RSA_KEY"; RSACryptoServiceProvider कुंजी = नया RSACryptoServiceProvider (cspParams); कुंजी। FromXmlString (signCertificate.PrivateKey.ToXmlString (सत्य)); /* हस्ताक्षरकर्ता के हस्ताक्षर के लिए नई कुंजी असाइन करें */ metadataSigner.SigningKey = key; – UncleZen
thx UncleZen ने इसे ठीक किया लेकिन cspParams.KeyContainerName = "XML_DISG_RSA_KEY" यह उपलब्ध नहीं है, यह इसके बिना भी काम करता है। – BitSchupser