TISS XML calculo de Hash

1 resposta
W

Bom dia, estou com problemas para calcular o hash de um arquivo XML no padrão TISS. Eu tenho um sistema que já gera esse xml com um hash já calculado. Dai eu utilizo o xstream para ler o valor nas tags do xml, concateno todos os valores em uma string e mando caucular o hash(md5), mas nunca sai o mesmo hash que o sistema me gerou. Eu dei uma olhada no site da ANS para ver as especificações de como calcular o hash mas não me ajudou muito. La so fala o seguinte:

A estrutura do corpo da mensagem TISS padroniza o conteúdo de informação que deve ser transacionado entre prestadores e operadoras de planos de saúde.

O epílogo da mensagem TISS contém o HASH das informações. Esse campo contém o HASH apenas dos valores contidos nas transações, não incluindo as tags XML. O objetivo do HASH é garantir que o dado, uma vez gravado, não seja alterado. O atributo VALOR do elemento HASH de uma transação deve conter, em hexadecimal (32 caracteres), o HASH MD5 (Message-Digest Algorithm) dos valores dos atributos da transação justapostos, lidos da esquerda para a direita. Não devem ser incluídos no cálculo do HASH os nomes dos elementos ou dos atributos da transação.
http://www.ans.gov.br/portal/site/_hotsite_tiss/mensagem_eletronica.htm

Se alguem ja trabalhou com XML/TISS e puder me dar uma luz…

1 Resposta

D
Public Shared Function HashTextMD5(ByVal TextToHash As String)
            Dim md5 As MD5CryptoServiceProvider
            Dim bytValue() As Byte
            Dim bytHash() As Byte

            ' Create New Crypto Service Provider Object
            md5 = New MD5CryptoServiceProvider

            ' Convert the original string to array of Bytes
            bytValue = System.Text.Encoding.UTF8.GetBytes(TextToHash)

            ' Compute the Hash, returns an array of Bytes
            bytHash = md5.ComputeHash(bytValue)

            md5.Clear()

            Dim hexa As String = String.Empty
            Dim b As Byte
            For Each b In bytHash
                hexa &= b.ToString("X2") ' <-- Formata para hexa de dois dígitos.
            Next

            Return hexa
        End Function
Para chamar a função, crie um módulo em vb.net adicione a classe abaixo:
Public Class Util
End Class
insira a função acima dentro da Class Util E no form faça a chamada pela função assim: util.HashTextMD5(txtNome.text)

Esta função irá gerar o MD5 em hexadecimal.

Para cálculo do hash vc precisará concatenar todas as strings do xml lembrando que vc deverá usar a função TRIM para retirar espaços em branco.

Criado 24 de maio de 2010
Ultima resposta 7 de set. de 2013
Respostas 1
Participantes 2