2016-05-12 6 views
-3

Ich schreibe ein Programm, um einen Hash für einige Dateien zu bekommen und Sachen mit ihnen zu tun. Ich versuche, Hash und so zu extrahieren, aber wenn ich kompiliere, erhalte ich einen Fehler.C SHA1() Datei öffnen und Hash-Fehler beim Kompilieren erhalten

#include <stdio.h> 
#include <openssl/sha.h> 

int main (int argc, char *argv[]) { 

    // para digitar em vez de //char str[50] = {0}; //scanf("Enter file name:%s", str);  //scanf  if (argc < 1) /* argc should be at least 2 for correct execution */ 
    { 
     printf("falta o ficheiro para ter hash: %s filename", argv[0]); 
     } 
     else 
     { 
     // filename to open 
     FILE *file = fopen(argv[1], "r");  //char str[] = "teste";  //const char str[] = "Original String";  unsigned char hash[SHA_DIGEST_LENGTH]; // == 20 

    SHA1(FILE, sizeof(FILE), hash); 

    printf("SHA1 of %s is %s\n", argv[1], hash); 

     /* fopen returns 0, the NULL pointer, on failure */ 
     if (file == 0) 
     { 
      printf("Could not open file\n"); 
     } 

    } 
    return 0; } 

immer diese Fehlermeldung beim Kompilieren mit gcc sob.c -o sha -lcrypto

sob.c: In function ‘main’: 
sob.c:24:7: error: expected expression before ‘FILE’ 
    SHA1(FILE, sizeof(FILE), hash); 
    ^
sob.c:24:7: error: too few arguments to function ‘SHA1’ 
In file included from sob.c:2:0: 
/usr/include/openssl/sha.h:126:16: note: declared here 
unsigned char *SHA1(const unsigned char *d, size_t n, unsigned char *md); 
       ^
+1

Die Fehlermeldung besagt, dass Sie die Funktion mit den falschen (Anzahl der) Parameter aufrufen. Es wird erwartet, dass Sie einen Zeichenpuffer als erstes Argument übergeben. Sie versuchen, einen Typnamen zu übergeben. Selbst wenn Sie 'FILE' in' Datei' geändert haben, würde es nicht richtig funktionieren: Sie können keinen Dateistream an die Funktion übergeben - Sie müssen die Daten aus der Datei lesen und die Daten an die Funktion übergeben. Ich bin mir nicht sicher über den Zweck des dritten Parameters; Sie müssen die [manuelle Seite] der Funktion lesen (https://www.openssl.org/docs/ manmaster/crypto/sha.html). –

+0

ty, ich konnte es direkt senden. –

Antwort

0

Sie können nicht in einer Datei übergeben (oder FILE, die eine Art ist, nicht eine Variable) SHA1, stattdessen müssen Sie die Datei in ein unsigniertes char-Array lesen und dieses Array übergeben!

Verwandte Themen