Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-05-2023
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.056
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Algo así:


Código Delphi [-]
uses
  IdHash, IdHashSHA, IdGlobal, SysUtils;

function CalculateFileHash(const FileName: string): string;
var
  FileStream: TFileStream;
  SHA256Hash: TIdHashSHA256;
  HashBytes: TBytes;
begin
  FileStream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
  try
    SHA256Hash := TIdHashSHA256.Create;
    try
      HashBytes := SHA256Hash.HashValue(FileStream);
      Result := LowerCase(BytesToHex(HashBytes));
    finally
      SHA256Hash.Free;
    end;
  finally
    FileStream.Free;
  end;
end;

// Ejemplo de uso:
procedure TForm1.Button1Click(Sender: TObject);
var
  FileName: string;
  HashValue: string;
begin
  FileName := 'ruta_del_archivo.xml';
  HashValue := CalculateFileHash(FileName);
  ShowMessage('Hash SHA256 del archivo XML: ' + HashValue);
end;
Responder Con Cita
  #2  
Antiguo 09-05-2023
Avatar de ramherfer
ramherfer ramherfer is offline
Miembro
 
Registrado: may 2013
Ubicación: Valencia
Posts: 51
Poder: 11
ramherfer Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Algo así:


Código Delphi [-]
uses
  IdHash, IdHashSHA, IdGlobal, SysUtils;

function CalculateFileHash(const FileName: string): string;
var
  FileStream: TFileStream;
  SHA256Hash: TIdHashSHA256;
  HashBytes: TBytes;
begin
  FileStream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
  try
    SHA256Hash := TIdHashSHA256.Create;
    try
      HashBytes := SHA256Hash.HashValue(FileStream);
      Result := LowerCase(BytesToHex(HashBytes));
    finally
      SHA256Hash.Free;
    end;
  finally
    FileStream.Free;
  end;
end;

// Ejemplo de uso:
procedure TForm1.Button1Click(Sender: TObject);
var
  FileName: string;
  HashValue: string;
begin
  FileName := 'ruta_del_archivo.xml';
  HashValue := CalculateFileHash(FileName);
  ShowMessage('Hash SHA256 del archivo XML: ' + HashValue);
end;
Gracias Casimiro, pero eso sería para crear el hash del fichero xml, pero lo que tiene que llevar es en el campo huella el hash sólo del contenido del nodo <RegistroFacturacion>contenido</RegistroFacturacion>. Entonces el problema es que no tengo ni pajolera idea de como pasar el nodo completo a widestring (por ejemplo) para calcular el hash del string y pasarlo al campo huella. Agradezco tu respuesta mil+1
__________________
Se humilde para admitir tus errores, inteligente para aprender de ellos y maduro para corregirlos.
Responder Con Cita
  #3  
Antiguo 10-05-2023
Avatar de ramherfer
ramherfer ramherfer is offline
Miembro
 
Registrado: may 2013
Ubicación: Valencia
Posts: 51
Poder: 11
ramherfer Va por buen camino
Bueno pues ya lo tengo, he recibido ayuda de valor incalculable, Si no, no lo consigo ni de coña. Ojo que como ya se había hablado, es bien distinto calcular el hash con el fichero xml formateado indentado que sin formato evidentemente los CR LF varian el valor del Hash. ¿Cómo se tendrá que hacer? pues sorpresa, pero por lo menos lo está haciendo. Luego es más fácil corregir y adaptar que empezar desde cero. Las cosas deprisa y corriendo por muy claras que las tengas, no suelen salir igual.
Observaciones estoy creando el hash mientras estoy creando el xml.

Aquí va el código, cualquier sugerencia u objeción sería bien recibida.

Código:
   

var
   archivoXML: TXMLDocument;
   NDatosControl, NCabecera : IXMLNode;
   NodoSistema, NodoRegistroAltaFacturas, NodoRegistroFacturacion: IXMLNode;
   ContenidoNodoRegistroFacturacion: WideString;
   Huella: String;

    · · ·

    NDatosControl := NCabecera.AddChild( 'DatosControl' );
    Nodo := NDatosControl.AddChild( 'Huella' );
    //***** Calculo Hash RegistroFacturacion
    NodoSistema := archivoXML.DocumentElement;
    NodoregistroAltaFacturas := NodoSistema.ChildNodes.FindNode('RegistroAltaFacturas');
    if Assigned(NodoregistroAltaFacturas) then
    begin
      NodoRegistroFacturacion := NodoRegistroAltaFacturas.ChildNodes.FindNode('RegistroFacturacion');
      if Assigned(NodoRegistroFacturacion) then
        ContenidoNodoRegistroFacturacion := NodoRegistroFacturacion.XML;
    end;
    Huella := CalculaStrHashSHA256(ContenidoNodoRegistroFacturacion, checkBox1.Checked);
    //****** Fin calculo huella SHA256
    Nodo.Text := Huella;
    Nodo := NDatosControl.AddChild( 'TipoHash' );
    Nodo.Text := '01';

    · · ·
La función CalculaStrHashSHA256 esta contenida en una librería DLL. Si alguien necesita el código de la librería lo pongo, aunque es bien sencillo.
He comprobado los Hash resultantes con la herramienta online https://emn178.github.io/online-tools/sha256.html y en principio están perfectos.
__________________
Se humilde para admitir tus errores, inteligente para aprender de ellos y maduro para corregirlos.
Responder Con Cita
  #4  
Antiguo 11-05-2023
edari edari is offline
Miembro
 
Registrado: jun 2021
Posts: 178
Poder: 3
edari Va por buen camino
Pongo por adelantado que no he empezado a hacer anda de esto hasta que no sea todo más o menos definitivo.



Me he leído el hilo y esperando la nueva "movida" que nos llega.



Yo también tendré que generar el Hash sha256 desde un proceso externo y no sé si puedo usar utilidades tipo CERTUTIL del propio sistema operativo o me estoy liando bien liado...


https://www.dell.com/support/kbdoc/e...re-y-antivirus


Insisto que igual estoy diciendo una burrada pero bueno por si os suena este tipo de utilidades. Perdón de antemano...



Gracias...
Responder Con Cita
  #5  
Antiguo 19-05-2023
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 886
Poder: 3
ermendalenda Va por buen camino
Cita:
Empezado por edari Ver Mensaje
Pongo por adelantado que no he empezado a hacer anda de esto hasta que no sea todo más o menos definitivo.


Me he leído el hilo y esperando la nueva "movida" que nos llega.



Yo también tendré que generar el Hash sha256 desde un proceso externo y no sé si puedo usar utilidades tipo CERTUTIL del propio sistema operativo o me estoy liando bien liado...


https://www.dell.com/support/kbdoc/e...re-y-antivirus


Insisto que igual estoy diciendo una burrada pero bueno por si os suena este tipo de utilidades. Perdón de antemano...



Gracias...
Hay apis de windows que se pueden incluir, no creo que desarrollers en un lenguaje que no se pueda, tendría que ser cobol qbasic o gwbasic
Responder Con Cita
  #6  
Antiguo 22-05-2023
edari edari is offline
Miembro
 
Registrado: jun 2021
Posts: 178
Poder: 3
edari Va por buen camino
Cita:
Empezado por ermendalenda Ver Mensaje
Hay apis de windows que se pueden incluir, no creo que desarrollers en un lenguaje que no se pueda, tendría que ser cobol qbasic o gwbasic

Mi duda es si el Hash que da ese sistema es correcto o no...
Responder Con Cita
  #7  
Antiguo 22-05-2023
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 886
Poder: 3
ermendalenda Va por buen camino
Cita:
Empezado por edari Ver Mensaje
Mi duda es si el Hash que da ese sistema es correcto o no...
Es perfecto ya tengo generados millones de tiquets y faxturas en formato verifactu y el hash es comprobado por un tercero al que le mando los datos y no hay un solo error
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Hijo de Informáticos gluglu Humor 3 13-03-2007 11:05:35
Adictos informaticos ... Trigger Humor 2 11-10-2004 12:18:32
Nosotros los Informáticos Trigger Humor 1 10-10-2004 14:58:09
Patrón de los Informáticos. obiwuan Varios 20 10-09-2003 14:44:54
Chistes Informaticos jhonny Humor 2 11-08-2003 21:59:09


La franja horaria es GMT +2. Ahora son las 11:40:00.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi