I'm trying to encrypt using XML, while running it returns this error:
the inner text of document node is read only and can not be set!
The 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();
}