Berechne und drucke den SHA256-Hash einer Datei mit OpenSSL

8

Ich versuche, eine C-Funktion mit OpenSSL / libcrypto zu schreiben, um die SHA256-Summe einer Datei zu berechnen. Ich stütze meinen Code auf Adam Lamer's C ++ Beispiel hier .

Hier ist mein Code:

%Vor%

Das Problem ist das ... Sehen Sie sich die berechneten Summen für eine Beispieldatei an:

%Vor%

Ich bekomme auch * stack smashing detected * wenn der Code fertig ausgeführt ist.

Sieht jemand, was ich falsch mache?

Danke!

    
dan6470 21.10.2011, 17:40
quelle

2 Antworten

12

Sieht so aus, als ob es viele '0xff' Blöcke in Ihrer Ausgabe gibt, und die entsprechenden Blöcke in der guten Zeichenfolge haben das hohe Bit gesetzt ... vielleicht ein Zeichenerweiterungsproblem irgendwo.

Macht Making:

%Vor%

unsigniert, wie:

%Vor%

Hilfe? (Vor allem in der Signatur von sha256_hash_string .)

    
P.T. 21.10.2011, 17:53
quelle
11

Sie geben ein signiertes char als ganze Zahl aus. Wenn das Byte negativ ist, wird es in ein signed int (das Standardargument promotions im Aufruf von sprintf ) konvertiert und dann in ein unsigned int konvertiert (über das %x Formatbezeichner) und ausgedruckt.

Also ist das Byte A0 -96 als ein vorzeichenbehaftetes Byte, das in -96 als signed int konvertiert wird, was 0xFFFFFFA0 in hex ist, so dass es als FFFFFFA0 ausgedruckt wird.

Um dies zu beheben, wird jedes Byte vor dem Drucken an ein unsigned char übergeben:

%Vor%

Sie erhalten die Warnung über das Abstürzen von Stacks, da sich ein signiertes Byte nahe dem Ende des Hashs befindet. Daher schreiben Sie die 8 Bytes FFFFFFB7 bei Offset 58, wenn Sie nur 2 Bytes schreiben wollten. Dies führt zu einem Pufferüberlauf , der zufällig hier gefunden wird, weil der Compiler wahrscheinlich a eingefügt hat Guard-Bereich oder Sicherheits-Cookie im Stack vor dem Rückgabewert, und es wurde festgestellt, dass dieser Guard-Bereich versehentlich geändert wurde.

    
Adam Rosenfield 21.10.2011 17:54
quelle

Tags und Links