CALCULAR HASH
Bom dia a Todos....
Existe alguma forma para calcular o Hash que eu pegue toda a informação que inseri no xml para enviar para hash ?
Tipo transformar os dados do xml em string ?
Pois hoje estou fazendo assim...A cada informação que eu informo na tag eu também informo em uma variavel que vai concatenando os dados mas tá um [Ô]saco[Ô] isso pois ja aconteceu de eu esquecer de informar algo dado nessa variavel e o hash calcula errado...!
Existe alguma forma para calcular o Hash que eu pegue toda a informação que inseri no xml para enviar para hash ?
Tipo transformar os dados do xml em string ?
Pois hoje estou fazendo assim...A cada informação que eu informo na tag eu também informo em uma variavel que vai concatenando os dados mas tá um [Ô]saco[Ô] isso pois ja aconteceu de eu esquecer de informar algo dado nessa variavel e o hash calcula errado...!
Tem como você fazer um exemplo básico do como você está fazendo agora para a gente ter uma visão melhor do que você pode mudar para facilitar isso?
Sim....
Essa esse class é onde eu preencho os dados do Solicitante na Guia Tiss...
Esta gerado certo, porém a variavel ClasseGeral.ValorHash é onde eu vou concatenando os valores de cada tag..
public static ctm_spsadtGuiaDadosSolicitante ctm_spsadtGuiaDadosSolicitante(string cnpjContratado, string nomeContratado, string nomeProfissional)
{
ctm_spsadtGuiaDadosSolicitante ctm_spsadtGuiaDadosSolicitante = new ctm_spsadtGuiaDadosSolicitante();
ct_contratadoDados contratadoSolicitante = new ct_contratadoDados();
contratadoSolicitante.ItemElementName = ItemChoiceType1.cnpjContratado;
contratadoSolicitante.Item = cnpjContratado;
ClasseGeral.ValorHash = ClasseGeral.ValorHash + cnpjContratado;
contratadoSolicitante.nomeContratado = nomeContratado;
ClasseGeral.ValorHash = ClasseGeral.ValorHash + nomeContratado;
ct_contratadoProfissionalDados ct_contratadoProfissionalDados = new ct_contratadoProfissionalDados();
ct_contratadoProfissionalDados.nomeProfissional = nomeProfissional;
ClasseGeral.ValorHash = ClasseGeral.ValorHash + nomeProfissional;
ct_contratadoProfissionalDados.conselhoProfissional = dm_conselhoProfissional.Item1;
ct_contratadoProfissionalDados.numeroConselhoProfissional = [Ô]9999[Ô];
ClasseGeral.ValorHash = ClasseGeral.ValorHash + [Ô]9999[Ô];
ct_contratadoProfissionalDados.UF = dm_UF.Item26;
ClasseGeral.ValorHash = ClasseGeral.ValorHash + [Ô]26[Ô];
ct_contratadoProfissionalDados.CBOS = dm_CBOS.Item201115;
ClasseGeral.ValorHash = ClasseGeral.ValorHash + [Ô]201115[Ô];
ctm_spsadtGuiaDadosSolicitante.profissionalSolicitante = ct_contratadoProfissionalDados;
ctm_spsadtGuiaDadosSolicitante.contratadoSolicitante = contratadoSolicitante;
return ctm_spsadtGuiaDadosSolicitante;
}
depois que os valores estão concatenado na variavel ClasseGeral.ValorHash eu jogo nessa class
public static void TissEpilogoXMLArquivo(mensagemTISS xml)
{
epilogo epilogo = new epilogo();
epilogo.hash = TissHash.CalculateMD5Hash(ClasseGeral.ValorHash);
xml.epilogo = epilogo;
}
que faz o calculo MD5 aqui...
public static string CalculateMD5Hash(string input)
{
MD5 md5 = System.Security.Cryptography.MD5.Create();
byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
byte[] hash = md5.ComputeHash(inputBytes);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hash.Length; i++)
{
sb.Append(hash[i].ToString([Ô]x2[Ô]));
}
return sb.ToString();
}
Essa esse class é onde eu preencho os dados do Solicitante na Guia Tiss...
Esta gerado certo, porém a variavel ClasseGeral.ValorHash é onde eu vou concatenando os valores de cada tag..
public static ctm_spsadtGuiaDadosSolicitante ctm_spsadtGuiaDadosSolicitante(string cnpjContratado, string nomeContratado, string nomeProfissional)
{
ctm_spsadtGuiaDadosSolicitante ctm_spsadtGuiaDadosSolicitante = new ctm_spsadtGuiaDadosSolicitante();
ct_contratadoDados contratadoSolicitante = new ct_contratadoDados();
contratadoSolicitante.ItemElementName = ItemChoiceType1.cnpjContratado;
contratadoSolicitante.Item = cnpjContratado;
ClasseGeral.ValorHash = ClasseGeral.ValorHash + cnpjContratado;
contratadoSolicitante.nomeContratado = nomeContratado;
ClasseGeral.ValorHash = ClasseGeral.ValorHash + nomeContratado;
ct_contratadoProfissionalDados ct_contratadoProfissionalDados = new ct_contratadoProfissionalDados();
ct_contratadoProfissionalDados.nomeProfissional = nomeProfissional;
ClasseGeral.ValorHash = ClasseGeral.ValorHash + nomeProfissional;
ct_contratadoProfissionalDados.conselhoProfissional = dm_conselhoProfissional.Item1;
ct_contratadoProfissionalDados.numeroConselhoProfissional = [Ô]9999[Ô];
ClasseGeral.ValorHash = ClasseGeral.ValorHash + [Ô]9999[Ô];
ct_contratadoProfissionalDados.UF = dm_UF.Item26;
ClasseGeral.ValorHash = ClasseGeral.ValorHash + [Ô]26[Ô];
ct_contratadoProfissionalDados.CBOS = dm_CBOS.Item201115;
ClasseGeral.ValorHash = ClasseGeral.ValorHash + [Ô]201115[Ô];
ctm_spsadtGuiaDadosSolicitante.profissionalSolicitante = ct_contratadoProfissionalDados;
ctm_spsadtGuiaDadosSolicitante.contratadoSolicitante = contratadoSolicitante;
return ctm_spsadtGuiaDadosSolicitante;
}
depois que os valores estão concatenado na variavel ClasseGeral.ValorHash eu jogo nessa class
public static void TissEpilogoXMLArquivo(mensagemTISS xml)
{
epilogo epilogo = new epilogo();
epilogo.hash = TissHash.CalculateMD5Hash(ClasseGeral.ValorHash);
xml.epilogo = epilogo;
}
que faz o calculo MD5 aqui...
public static string CalculateMD5Hash(string input)
{
MD5 md5 = System.Security.Cryptography.MD5.Create();
byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
byte[] hash = md5.ComputeHash(inputBytes);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hash.Length; i++)
{
sb.Append(hash[i].ToString([Ô]x2[Ô]));
}
return sb.ToString();
}
se eu não esquecer de informar todos os valores das tags do XML na variavel ClasseGeral.ValorHash..o valor do Hash é válido...acontece que ja esquecei de informar alguma tag nessa variavel e o Hash não calcula certo...o problema é achar aonde que eu não informei algum valor para a variavel ClasseGeral.ValorHash....tenho que sair caçando o projeito inteiro....daà não dá...eu queria uma forma mais fácil para isso....
Acho que está meio complicado no seu caso.
Primeiro você tem uma classe chamada ctm_spsadtGuiaDadosSolicitante que eu não tenho certeza se foi você que fez ou se é uma classe de algum lugar que pegou, mas o caso é que como é uma classe e não um XDocument ou XmlDocument fica difÃcil fazer alguma forma de pegar os valores, até porque precisam ser pegos em ordem correta.
Outro problema que se tem ai é o caso de algumas propriedades que parecem receber uma enumeração do tipo dm_UF.Item26 só que o valor para o calculo deve ser apenas [Ô]26[Ô]
O que eu faria é se a classe ctm_spsadtGuiaDadosSolicitante foi criada por você eu adicionaria nela o código para calcular o hash, pois assim ficaria mais centralizado, só teria que lembrar de atualizar este método cada vez que adicionar uma nova propriedade na classe, mas ainda assim seria manual para pegar os valores. Se não foi criada por você esta classe então acho que não existe nada que vá realmente facilitar isso pra você
Primeiro você tem uma classe chamada ctm_spsadtGuiaDadosSolicitante que eu não tenho certeza se foi você que fez ou se é uma classe de algum lugar que pegou, mas o caso é que como é uma classe e não um XDocument ou XmlDocument fica difÃcil fazer alguma forma de pegar os valores, até porque precisam ser pegos em ordem correta.
Outro problema que se tem ai é o caso de algumas propriedades que parecem receber uma enumeração do tipo dm_UF.Item26 só que o valor para o calculo deve ser apenas [Ô]26[Ô]
O que eu faria é se a classe ctm_spsadtGuiaDadosSolicitante foi criada por você eu adicionaria nela o código para calcular o hash, pois assim ficaria mais centralizado, só teria que lembrar de atualizar este método cada vez que adicionar uma nova propriedade na classe, mas ainda assim seria manual para pegar os valores. Se não foi criada por você esta classe então acho que não existe nada que vá realmente facilitar isso pra você
essa classes eu criei atras dos schemas do xml que preciso gerar usando o xsd.exe do visual studio...
Tópico encerrado , respostas não são mais permitidas