2015/07/10

憑證簽章範例

 public string Sign(string xmlString)
 {
            XmlDocument doc = new XmlDocument();

            XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
            nsmgr.AddNamespace("cdp", "http://www.hl7.org.tw/EMR/CDocumentPayload/v1.0");
            nsmgr.AddNamespace("ds", "http://www.w3.org/2000/09/xmldsig#");
            nsmgr.AddNamespace("xades132", "http://uri.etsi.org/01903/v1.3.2#");
            nsmgr.AddNamespace("xades141", "http://uri.etsi.org/01903/v1.4.1#");

            doc.PreserveWhitespace = true;
            doc.LoadXml(xmlString);
            SignedXml sig = new SignedXml(doc);

            X509Certificate2 cert = new X509Certificate2("d:\\cer.pfx", "password");
            sig.SigningKey = cert.PrivateKey;

            Reference reff = new Reference("");
            reff.AddTransform(new XmlDsigEnvelopedSignatureTransform());
            sig.AddReference(reff);

            KeyInfo keyInfo = new KeyInfo();
            keyInfo.AddClause(new KeyInfoX509Data(cert));

            sig.KeyInfo = keyInfo;

            sig.ComputeSignature();
            doc.DocumentElement.AppendChild(sig.GetXml());
            StringWriter sw = new StringWriter();
            doc.Save(sw);
            return sw.ToString();
}

沒有留言: