Ver Mensaje Individual
  #1  
Antiguo 04-12-2024
gohermo gohermo is offline
Registrado
NULL
 
Registrado: abr 2014
Posts: 5
Reputación: 0
gohermo Va por buen camino
Ejemplo para crear la Huella

Buenos días,
Estoy intentando hacer un programa en Visual Studio Basic para calcular la huella siguiendo el ejemplo en java que la AEAT expone en la documentación, y el resultado es diferente. Alguien podría compartir el código en Visual Studio Basic?

Expongo el código que estoy utilizando:

Código:
Imports System
Imports System.Security.Cryptography
Imports System.Text
Imports System.Web

Module Program
    Sub Main(args As String())
        Console.WriteLine(CalculaHuellaAlta("89890001K", "12345678/G33", "01-01-2024", "F1", "12.35", "123.45", "", "2024-01-01T19:20:30+01:00"))

    End Sub


    ' Genera el hash en formato Base16 (hexadecimal) en mayúsculas
    Public Function GetHashVerificada(msg As String) As String
        Try
            Dim digest As HashAlgorithm = SHA256.Create()
            Dim hash As Byte() = digest.ComputeHash(Encoding.UTF8.GetBytes(msg))

            ' Convertir el hash a formato hexadecimal en mayúsculas
            Dim sb As New StringBuilder()
            For Each b As Byte In hash
                sb.Append(b.ToString("X2")) ' X2 asegura mayúsculas
            Next
            Return sb.ToString()
        Catch ex As Exception
            Throw New ArgumentException("Error al generar la huella SHA", ex)
        End Try
    End Function

    ' Genera la referencia concatenada
    Public Function GetReferenciaRegistroAlta(nifEmisor As String, numFacturaSerie As String,
                                                     fechaExpedicion As String, tipoFactura As String,
                                                     cuotaTotal As String, importeTotal As String,
                                                     huellaAnterior As String, fechaHoraUsoRegistro As String) As String
        Dim sb As New StringBuilder()
        sb.Append(GetValorCampo("IDEmisorFactura", nifEmisor, True)) _
          .Append(GetValorCampo("NumSerieFactura", numFacturaSerie, True)) _
          .Append(GetValorCampo("FechaExpedicionFactura", fechaExpedicion, True)) _
          .Append(GetValorCampo("TipoFactura", tipoFactura, True)) _
          .Append(GetValorCampo("CuotaTotal", cuotaTotal, True)) _
          .Append(GetValorCampo("ImporteTotal", importeTotal, True)) _
          .Append(GetValorCampo("Huella", huellaAnterior, True)) _
          .Append(GetValorCampo("FechaHoraUsoRegistro", fechaHoraUsoRegistro, False))

        Return sb.ToString()
    End Function

    ' Concatena un campo con su valor y separador
    Public Function GetValorCampo(nombre As String, valor As String, separador As Boolean) As String
        If separador Then
            Return nombre & "=" & If(String.IsNullOrEmpty(valor), "", valor.Trim()) & ";"
        Else
            Return nombre & "=" & If(String.IsNullOrEmpty(valor), "", valor.Trim())
        End If
    End Function
    ' Calcula la huella completa
    Public Function CalculaHuellaAlta(nifEmisor As String, numFacturaSerie As String, fechaExpedicion As Date,
                                             tipoFactura As String, cuotaTotal As String, importeTotal As String,
                                             huellaAnterior As String, fechaHoraUsoRegistro As String) As String
        ' Genera la referencia concatenada
        Dim ref As String = GetReferenciaRegistroAlta(nifEmisor, numFacturaSerie, fechaExpedicion.ToString("yyyy-MM-dd"),
                                                      tipoFactura, cuotaTotal, importeTotal, huellaAnterior, fechaHoraUsoRegistro)

        ' Genera el hash en Base16
        Return GetHashVerificada(ref)
    End Function
End Module
Resultado obtenido: 07DCAADE3EA3216A80409A37359A5A53D48038F7BD2C61D51178CD7112C3E9FA
Resultado que debería de ser según la documentación de la AEAT: 3C464DAF61ACB827C65FDA19F352A4E3BDC2C640E9E9FC4CC058073F38F12F60

Gracias de antemano por la ayuda.

Saludos,

Última edición por Neftali [Germán.Estévez] fecha: 05-12-2024 a las 11:48:31. Razón: Añadir TAG's al código
Responder Con Cita