filehash


Gå til bund
Gravatar

#1 CBM 9. nov. 2016 12:55

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


https://fricomputer.dk https://retrohardwareheaven.blogspot.com/ #ComeToTheDuckSide www.duckduckgo.com, AMD + ASUS = kvalitet! #BringBackTheKeyboard #JackOn SailfishOS rocks! Stop using Google search.. use https://justsearchportal.com/ instead (includes DuckDuckGo)
Gravatar

#2 arne_v 9. nov. 2016 23:06

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:


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)

The greater danger for most of us lies not in setting our aim too high and falling short; but in setting our aim too low, and achieving our mark.
Gravatar

#3 CBM 10. nov. 2016 06:48

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



https://fricomputer.dk https://retrohardwareheaven.blogspot.com/ #ComeToTheDuckSide www.duckduckgo.com, AMD + ASUS = kvalitet! #BringBackTheKeyboard #JackOn SailfishOS rocks! Stop using Google search.. use https://justsearchportal.com/ instead (includes DuckDuckGo)
Gravatar

#4 CBM 10. nov. 2016 07:56

hmm

ctxstore = en GUID af en art?
md = "result buffer" ?
https://fricomputer.dk https://retrohardwareheaven.blogspot.com/ #ComeToTheDuckSide www.duckduckgo.com, AMD + ASUS = kvalitet! #BringBackTheKeyboard #JackOn SailfishOS rocks! Stop using Google search.. use https://justsearchportal.com/ instead (includes DuckDuckGo)
Gravatar

#5 _tweak 10. nov. 2016 08:17

*bam* det er lang tid siden jeg har set pascal/delphi :)
https://newz.dk/
Gravatar

#6 CBM 10. nov. 2016 09:31

nvrmd fik det til at spille :)
https://fricomputer.dk https://retrohardwareheaven.blogspot.com/ #ComeToTheDuckSide www.duckduckgo.com, AMD + ASUS = kvalitet! #BringBackTheKeyboard #JackOn SailfishOS rocks! Stop using Google search.. use https://justsearchportal.com/ instead (includes DuckDuckGo)
Gravatar

#7 arne_v 10. nov. 2016 14:46

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.
The greater danger for most of us lies not in setting our aim too high and falling short; but in setting our aim too low, and achieving our mark.
Gravatar

#8 arne_v 10. nov. 2016 16:59

er større end eller lig med
The greater danger for most of us lies not in setting our aim too high and falling short; but in setting our aim too low, and achieving our mark.
Gravatar

#9 arne_v 10. nov. 2016 17:04

_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.
The greater danger for most of us lies not in setting our aim too high and falling short; but in setting our aim too low, and achieving our mark.
Gravatar

#10 CBM 10. nov. 2016 17:34

Jeg foretrækker faktisk disse lidt ældre sprog som Delphi :)
https://fricomputer.dk https://retrohardwareheaven.blogspot.com/ #ComeToTheDuckSide www.duckduckgo.com, AMD + ASUS = kvalitet! #BringBackTheKeyboard #JackOn SailfishOS rocks! Stop using Google search.. use https://justsearchportal.com/ instead (includes DuckDuckGo)
Gå til top

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.

Opret Bruger Login