Чтение бинарного файла в массив символов (язык c) - PullRequest
0 голосов
/ 23 декабря 2018

Я хочу проверить сообщение, которое является просто строкой из файла.Для этого у меня есть цифровая подпись и открытый ключ.Кроме того, я использую openssl-1.1.1 функции для проверки, такие как EVP_VerifyInit_ex(), EVP_VerifyUpdate(), EVP_VerifyFinal().Вызов функции EVP_VerifyFinal() выдает

ошибка: 04091077 int_rsa_verify: неверная длина подписи.

У меня есть цифровая подпись в виде файла, и я передаю ее как unsigned charEVP_VerifyFinal() функция.Я понял, что, когда я печатаю файл с функцией c функцией read(), вывод будет намного короче по сравнению с тем, когда я печатаю файл с getc() и putc() до EOF.Поэтому я предполагаю, что этот двоичный файл имеет несколько нулевых байтов, что является проблемой, когда я использую read и передаю его в функцию EVP_VerifyFinal(), верно?

как мне прочитать signatur.bin до unsigned char или char array ???

мой код

void readBinary(const char *file)
{
    int c;
    FILE *fp;

    fp = fopen(file, "rb");
    if(fp != NULL)
        {
        while((c = getc(fp)) != EOF) 
        {
            putc(c, stdout);
        }
    }
    fclose(fp);
}


unsigned char* readCipher(const char *file)
{
    int red = 0;
    int length = 0;
    unsigned char *input = NULL;

    length = getFilesize(file);
    input = (unsigned char*)malloc(length * sizeof(char));

    red = open(file, O_RDONLY);
    if (red < 0)
        printf("Fehler beim lesen von Datei: %s\n", file);

    read(red,input,length);

    return input;
}



readCipher("signature.bin") // has just a little output
readBinary("signature.bin") // hast a lot more output

Как я могу прочитать вседвоичный файл в массив char, чтобы EVP_Verifyfinal имел правильную длину для проверки открытого текста ???

...