mboost-dp1
filehash
- Forside
- ⟨
- Forum
- ⟨
- Support
Jeg skal have beregnet en hashværdi af en fil vha SHA256 og jeg skal gøre det i Delphi v.9.
Jeg fandt noget kode fra en W.Ehrhardt
(Links til pas fil kan findes ved hurtig google søgning)
Han har flg. funktion :
Procedure hashfile ({ifdef CONST} const {$endif} fname: Str255; OhHash: PHashDesc; var Digest: THashDigest; var buf; bsize: word; var Err: word);
Jeg er bare i tvivl om hvorledes jeg anvender den
Fx fname... er det så filnavnet? Fx test.exe eller c:\test\test.exe ?
Hvad er PHash?
Digest burde være resultatet men virker til at være en input parameter?
Buf har ingen type?
Bsize må være filens størrelse i bytes
Err er til fejlkode?
Nogen der evt kunne downloade pas filen og vise et kode eksempel hvor der udregnes et file hash med denne funktion?
Http://www.wolfgang-ehrhardt.de/crchash_en.html
Han har et demo program men har lidt problemer med at se præcis hvor denne funktion bruges i hans eksempler
Jeg fandt noget kode fra en W.Ehrhardt
(Links til pas fil kan findes ved hurtig google søgning)
Han har flg. funktion :
Procedure hashfile ({ifdef CONST} const {$endif} fname: Str255; OhHash: PHashDesc; var Digest: THashDigest; var buf; bsize: word; var Err: word);
Jeg er bare i tvivl om hvorledes jeg anvender den
Fx fname... er det så filnavnet? Fx test.exe eller c:\test\test.exe ?
Hvad er PHash?
Digest burde være resultatet men virker til at være en input parameter?
Buf har ingen type?
Bsize må være filens størrelse i bytes
Err er til fejlkode?
Nogen der evt kunne downloade pas filen og vise et kode eksempel hvor der udregnes et file hash med denne funktion?
Http://www.wolfgang-ehrhardt.de/crchash_en.html
Han har et demo program men har lidt problemer med at se præcis hvor denne funktion bruges i hans eksempler
Hvorfor ikke vælge en simpel DIY løsning?
Genbrug er godt men ikke hvis det er en gættekonkurrence.
Brug OpenSSL DLL for implementation.
Demo:
Testet med Lazarus ikke Delphi.
Det kan godt være lidt tricky at med Delphi->C.
Men API er:
- simpelt
- meget udbredt (i C)
Genbrug er godt men ikke hvis det er en gættekonkurrence.
Brug OpenSSL DLL for implementation.
Demo:
program tstsha256;
uses
SysUtils, Windows;
procedure SHA256_Init(var ctx : pointer); cdecl; external 'libeay32.dll';
procedure SHA256_Update(var ctx : pointer; buf : PChar; buflen : integer); cdecl; external 'libeay32.dll';
procedure SHA256_Final(md : PChar; var ctx : pointer); cdecl; external 'libeay32.dll';
procedure test(buf : string);
var
ctxstore : array [1..10000] of char;
ctx : pointer;
md : array [1..32] of char;
i : integer;
begin
ctx := @ctxstore[1];
SHA256_Init(ctx);
SHA256_Update(ctx, PChar(buf), Length(buf));
SHA256_Final(@md[1], ctx);
for i := 1 to 32 do begin
write(IntToHex(Ord(md[i]), 2));
end;
writeln;
end;
begin
test('Dette er en test!');
end.
Testet med Lazarus ikke Delphi.
Det kan godt være lidt tricky at med Delphi->C.
Men API er:
- simpelt
- meget udbredt (i C)
Hvad indeholder ctxstore og
Md?
Buf er filens binære indhold konverteret til string tænker jeg?
Når du så laver en write i dit for loop, tænker jeg at jeg her skal putte det i en variabel i stedet for, typisk opsamle det i en string
Jeg skal egentlig bruge en funktion der tager en buffer som input (filens binære indhold, typisk en byte buffer) og giver en string som output (filehash)
Men må erkende at jeg ikke har prøvet at arbejde med filehashing før.
Jeg er fortaler for at det skal gøres så enkelt som muligt
Md?
Buf er filens binære indhold konverteret til string tænker jeg?
Når du så laver en write i dit for loop, tænker jeg at jeg her skal putte det i en variabel i stedet for, typisk opsamle det i en string
Jeg skal egentlig bruge en funktion der tager en buffer som input (filens binære indhold, typisk en byte buffer) og giver en string som output (filehash)
Men må erkende at jeg ikke har prøvet at arbejde med filehashing før.
Jeg er fortaler for at det skal gøres så enkelt som muligt
Lidt blandet.
ctxstore er reelt en C SHA256_CTX struct.
Man kunne bruge tid paa at oversætte den til Delphi.
Men jeg er doven og der er ikke nogen grund til det. Sålænge at størrelsen af ctxstore (10000) er mindre end eller lig med størrelsen af C SHA256_CTX struct, så virker det.
md er hash resultatet.
buf er det som hashes.
Bemærk at SHA256_Update kan kaldes flere gang, så man behøver ikke læse hele filen ind på en gang.
ctxstore er reelt en C SHA256_CTX struct.
Man kunne bruge tid paa at oversætte den til Delphi.
Men jeg er doven og der er ikke nogen grund til det. Sålænge at størrelsen af ctxstore (10000) er mindre end eller lig med størrelsen af C SHA256_CTX struct, så virker det.
md er hash resultatet.
buf er det som hashes.
Bemærk at SHA256_Update kan kaldes flere gang, så man behøver ikke læse hele filen ind på en gang.
_tweak (5) skrev:*bam* det er lang tid siden jeg har set pascal/delphi
Det er desværre ikke så udbredt idag.
Fremragende sprog til undervisning i programmering.
OK sprog til visse former for enkeltstående programmer.
Jeg har skrevet rigtigt mange VAX Pascal programmer fra slut 80'erne til tidlig 00'erne.
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.