예제 #1
0
        public void criptografarXML(XmlDocument xml, X509Certificate2 certificado)
        {
            X509Certificate2Util certificadoUtil = new X509Certificate2Util();

            if (certificado != null)
            {
                // Gera a chave/iv para criptografar os valores
                byte[] key, iv;
                gerarChaveIvAes(out key, out iv);

                // Cria os elementos no xml
                xml.DocumentElement.Attributes.RemoveAll();
                var xmlThumbprint = xml.CreateAttribute(XML_CertificateThumbprint);
                xmlThumbprint.InnerText = certificado.Thumbprint;
                xml.DocumentElement.Attributes.Append(xmlThumbprint);

                var xmlKey = xml.CreateAttribute(XML_Key);
                xmlKey.InnerText = Convert.ToBase64String(certificadoUtil.Criptografar(certificado, key));
                xml.DocumentElement.Attributes.Append(xmlKey);

                var xmlIv = xml.CreateAttribute(XML_IV);
                xmlIv.InnerText = Convert.ToBase64String(certificadoUtil.Criptografar(certificado, iv));
                xml.DocumentElement.Attributes.Append(xmlIv);

                // Criptografa o conteudo do XML
                xml.DocumentElement.InnerXml = Convert.ToBase64String(criptografarAes(xml.DocumentElement.InnerXml, key, iv));
            }
        }
예제 #2
0
        public static void descriptografarXML(XmlDocument xml, X509Certificate2 certificadoExterno, out X509Certificate2 certificadoUtilizado)
        {
            certificadoUtilizado = null;
            X509Certificate2Util certificadoUtil = new X509Certificate2Util();

            if (xml.DocumentElement.Attributes[XML_CertificateThumbprint] != null)
            //if (xml.Tables[0].Columns[XML_CertificateThumbprint] != null)
            {
                var thumbprint = xml.DocumentElement.Attributes[XML_CertificateThumbprint].InnerText;
                var keyCrypted = Convert.FromBase64String(xml.DocumentElement.Attributes[XML_Key].InnerText);
                var ivCrypted  = Convert.FromBase64String(xml.DocumentElement.Attributes[XML_IV].InnerText);

                if (certificadoExterno != null && thumbprint == certificadoExterno.Thumbprint)
                {
                    certificadoUtilizado = certificadoExterno;
                }
                else
                {
                    certificadoUtilizado = certificadoUtil.ObterCertificado(thumbprint);
                    if (certificadoUtilizado == null)
                    {
                        throw new CertificadoNaoEncontradoException(thumbprint);
                    }
                }


                var key = certificadoUtil.Descriptografar(certificadoUtilizado, keyCrypted);
                var iv  = certificadoUtil.Descriptografar(certificadoUtilizado, ivCrypted);

                xml.DocumentElement.InnerXml = descriptografarAes(Convert.FromBase64String(xml.DocumentElement.InnerXml), key, iv);

                // Adiciona os atributos do documento
                foreach (XmlAttribute attribute in xml.DocumentElement.Attributes)
                {
                    //TODO PH: REVER ESSE PONTO
                    //xml.DataSet.ExtendedProperties[attribute.LocalName] = attribute.InnerText;
                }
            }
        }