CALCULAR HASH

F001E 06/09/2013 09:34:19
#428535
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...!
OCELOT 06/09/2013 13:41:40
#428542
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?
F001E 06/09/2013 14:53:31
#428547
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();
}
F001E 06/09/2013 14:56:52
#428548
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....
OCELOT 06/09/2013 16:39:49
#428551
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ê
F001E 06/09/2013 18:00:01
#428553
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