我想验证一条消息,它只是文件中的一个字符串。因此,我有一个数字签名和一个公共密钥。此外,我使用 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
具有正确的长度来验证明文?