"Node is read only" error when trying to encrypt XML

Asked

Viewed 71 times

1

I am trying to encrypt using XML, while running returns this error :

the Inner text of Document Node is read only and cannot be set!

Error happens on line xmlDadosCartao.InnerText = StringEncritacao.Decriptacao(dadoEncriptado);

public class SegurancaCartao
{
    private bool isDescriptado = false;
    private bool isEncriptado = false;
    private string titularCartao;
    private string numCartao;
    private string emissaoData;
    private string dataExpira;
    private string issueNumero;
    private string cartaoTipo;
    private string dadoEncriptado;
    private XmlDocument xmlDadosCartao;

    public SegurancaCartao(string novoDadoEncryptado)
    {
        //construtor para usar com o dado encriptado
        dadoEncriptado = novoDadoEncryptado;
        Desencriptar();

    }
    public SegurancaCartao(string novoTitularCarrinho, 
        string novoNumCartao, 
        string novoEmissaoData, 
        string novoDataExpiracao,
        string novoIssueNumero, 
        string novoCartaoTipo)
    {
        //construtor para usar dados desencriptado
        titularCartao = novoTitularCarrinho;
        numCartao = novoNumCartao;
        emissaoData = novoEmissaoData;
        dataExpira = novoDataExpiracao;
        issueNumero = novoIssueNumero;
        cartaoTipo = novoCartaoTipo;
        EncripatadoDado();
    }
    private void CreateXml()
    {
        //codifica os detalhes do cartao como arquivo Xml
        xmlDadosCartao = new XmlDocument();
        XmlElement documentoRoot = xmlDadosCartao.CreateElement("CartaoDetalhes");
        XmlElement child;

        child = xmlDadosCartao.CreateElement("TitularCartao");
        child.InnerXml = titularCartao;
        documentoRoot.AppendChild(child);

        child = xmlDadosCartao.CreateElement("NumCartao");
        child.InnerXml = numCartao;
        documentoRoot.AppendChild(child);

        child = xmlDadosCartao.CreateElement("EmissaoData");
        child.InnerXml = emissaoData ;
        documentoRoot.AppendChild(child);

        child = xmlDadosCartao.CreateElement("DataExpira");
        child.InnerXml = dataExpira ;
        documentoRoot.AppendChild(child);

        child = xmlDadosCartao.CreateElement("IssueData");
        child.InnerXml = issueNumero ;
        documentoRoot.AppendChild(child);

        child = xmlDadosCartao.CreateElement("CartaoTipo");
        child.InnerXml = cartaoTipo ;
        documentoRoot.AppendChild(child);
        xmlDadosCartao.AppendChild(documentoRoot);
    }
    private void ExtractXml()
    {
        //apanha os detallhes do cartao do xml doc 
        titularCartao = xmlDadosCartao.GetElementsByTagName("TitularCartao").Item(0).InnerXml;
        numCartao  = xmlDadosCartao.GetElementsByTagName("NumCartao").Item(0).InnerXml;
        emissaoData  = xmlDadosCartao.GetElementsByTagName("EmissaoData").Item(0).InnerXml;
        dataExpira  = xmlDadosCartao.GetElementsByTagName("DataExpira").Item(0).InnerXml;
        issueNumero = xmlDadosCartao.GetElementsByTagName("IssueData").Item(0).InnerXml;
        cartaoTipo  = xmlDadosCartao.GetElementsByTagName("CartaoTipo").Item(0).InnerXml;

    }
    private void EncripatadoDado()
    {
        try
        {
            //poe o dado dentro documento XML doc
            CreateXml();
            //encripta o dado
            dadoEncriptado = StringEncritacao.Encritacao(xmlDadosCartao.OuterXml);
            //define o flag encriptado
            isEncriptado = true;
        }
        catch 
        {
            throw new SecureCartaoException("Impossivel encriptar dado.");
        }
    }
    private void Desencriptar()
    {
        try
        {
            //dado encriptado
            xmlDadosCartao = new XmlDocument();
            xmlDadosCartao.InnerText = StringEncritacao.Decriptacao(dadoEncriptado);
            ExtractXml();
            //define a flag encriptada
            isDescriptado = true;
        }
        catch 
        {
            throw new SecureCartaoException ("Impossivel Desincriptar o dado");
        }

        }
    public string TitularCartao
    {
        get 
        {
            if (isDescriptado )
            {
                return titularCartao ;
            }
            else 
            {
                throw new SecureCartaoException ("Dado não Desencriptado.");
            }
        }
    }
     public string NumCartao
    {
        get 
        {
            if (isDescriptado )
            {
                return numCartao ;
            }
            else 
            {
                throw new SecureCartaoException ("Dado não Desencriptado.");
            }
        }
    }
     public string NumCartaoX
    {
        get 
        {
            if (isDescriptado )
            {
                return "XXXX-XXXX-XXXX" +numCartao .Substring (numCartao .Length -4,4);
            }
            else 
            {
                throw new SecureCartaoException ("Dado não Desencriptado.");
            }
        }
    }
     public string EmissaoData
    {
        get 
        {
            if (isDescriptado )
            {
                return emissaoData;
            }
            else 
            {
                throw new SecureCartaoException ("Dado não  Desencriptado.");
            }
        }
    }
    public string DataExpira
    {
        get 
        {
            if (isDescriptado )
            {
                return dataExpira ;
            }
            else 
            {
                throw new SecureCartaoException ("Dado não Desencriptado.");
            }
        }
    }
    public string IssueNumero
    {
        get 
        {
            if (isDescriptado )
            {
                return issueNumero  ;
            }
            else 
            {
                throw new SecureCartaoException ("Dado não Desencriptado.");
            }
        }
    }
    public string CartaoTipo
    {
        get 
        {
            if (isDescriptado )
            {
                return cartaoTipo  ;
            }
            else 
            {
                throw new SecureCartaoException ("Dado não Desencriptado.");
            }
        }
    }
   public string DadoEncritado
   {
       get 
       {
           if (isEncriptado )
           {
               return dadoEncriptado ;
           }
           else 
           {
                throw new SecureCartaoException ("Dado nao Desencriptado");
           }
       }
   }
    }

}

Code Behind form

protected void Processar_Click(object sender, EventArgs e)
{
    SegurancaCartao encriptadoCartao = new SegurancaCartao(titularcartaoBox.Text, numcartaoBox.Text, emissaoDaraBox.Text, dataesxpiraBox.Text, edicaodataBox.Text, cartaoTipoBox.Text);
    string encritadoDado=encriptadoCartao .DadoEncritado ;
    SegurancaCartao decriptadocartao = new SegurancaCartao(encritadoDado);
    string decriptadoDado = string.Format("{0},{1},{2},{3},{4},{5}", decriptadocartao.TitularCartao, decriptadocartao.NumCartao, decriptadocartao.EmissaoData, decriptadocartao.DataExpira, decriptadocartao.IssueNumero, decriptadocartao.CartaoTipo);
    StringBuilder sb = new StringBuilder();
    sb.Append("Dado Encriptado:<br/>");
    sb .Append ("<textarea style=\"width:400px;height:150px;\">");
    sb.Append(encritadoDado);
    sb.Append("</textarea style=\"width:400px;height:150px;\">");
    sb.Append(decriptadoDado);
    resultado.Text = sb.ToString();
}
  • On which line is the error?

  • xmlDadosCartao.InnerText = StringEncritacao.Decriptacao(dadoEncriptado);

  • The excessao points to this line

1 answer

1

To load XML into a XmlDocument you must use the LoadXml instead of using the property InnerText:

private void Desencriptar()
{
    try
    {
        //dado encriptado
        xmlDadosCartao = new XmlDocument();
        xmlDadosCartao.LoadXml(StringEncritacao.Decriptacao(dadoEncriptado));
        ExtractXml();
        //define a flag encriptada
        isDescriptado = true;
    }
    catch 
    {
        throw new SecureCartaoException ("Impossivel Desincriptar o dado");
    }
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.