将二进制文件读入char数组(语言c)

时间:2018-12-23 01:37:33

标签: arrays binary char

我想验证一条消息,它只是文件中的一个字符串。因此,我有一个数字签名和一个公共密钥。此外,我使用 openssl-1.1.1 函数进行验证,例如EVP_VerifyInit_ex()EVP_VerifyUpdate()EVP_VerifyFinal()EVP_VerifyFinal()函数调用将引发

  

错误:04091077 int_rsa_verify:签名长度错误。

我拥有数字签名作为文件,并将其作为unsigned char传递给EVP_VerifyFinal()函数。我发现,当我使用功能c函数read()打印文件时,与使用getc()putc()打印文件直到EOF相比,输出要短得多。所以我猜这个二进制文件有一些零字节,当我使用read并将其传递给函数EVP_VerifyFinal()时,这是一个问题,对吗?

我如何阅读signatur.binunsigned charchar 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具有正确的长度来验证明文?

0 个答案:

没有答案