Я хочу проверить сообщение, которое является просто строкой из файла.Для этого у меня есть цифровая подпись и открытый ключ.Кроме того, я использую 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.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
имел правильную длину для проверки открытого текста ???