linux中的OpenSSL C库
我已经在我的ubuntu linux机器上安装了OpenSSL。我想使用openssl C库函数对随机字符串进行签名和验证。我已经成功地在代码中完成了它。但是,如果我将生成的签名数据放入文件并使用命令行进行验证,它将失败linux中的OpenSSL C库,c,linux,openssl,C,Linux,Openssl,我已经在我的ubuntu linux机器上安装了OpenSSL。我想使用openssl C库函数对随机字符串进行签名和验证。我已经成功地在代码中完成了它。但是,如果我将生成的签名数据放入文件并使用命令行进行验证,它将失败 /*Extract data using sign file created through code to Verify the sign */ openssl rsautl -verify -inkey myPublickey.pub -pubin -in sign >
/*Extract data using sign file created through code to Verify the sign */
openssl rsautl -verify -inkey myPublickey.pub -pubin -in sign > verified
为什么OpenSSL命令行工具与库函数调用不匹配。我想在代码中使用私钥对随机数签名,并在命令行中使用公钥验证签名数据
这是我的工作代码
/* code */
FILE *fp;
RSA *rsa;
unsigned int sign_len=0;
unsigned char dataToSign[100];
int msgLen = 0;
//Open the Public key file in readonly mode
fp = fopen(PRIVATE_KEY_PATH, "r");
if (fp != NULL)
{
rsa = PEM_read_RSAPrivateKey(fp, &rsa,NULL,NULL);
unsigned int keySize = RSA_size(rsa);
*signDataBufer = (char *)malloc(keySize);
FILE *msgFp;
msgFp = fopen("/root/.Remoteaccesskey/text","r");
if(msgFp != NULL)
{
msgLen = getline(dataToSign, &msgLen, msgFp);
printf("Read message file success\n");
fclose( msgFp );
}
printf("Message = %s\n",dataToSign);
if(RSA_sign(NID_sha1, dataToSign, msgLen, *signDataBufer, &sign_len, rsa) != SUCCESS)
{
logErrorC("OppenSSL RSA sign error \n",ERR_error_string(ERR_get_error(), NULL));
}
else //Write the signed data to file
{
FILE *publicFp, *signFp;
RSA *pub_rsa;
int verified=0;
signFp = fopen("/root/.Remoteaccesskey/sign","w");
if(signFp != NULL)
{
fwrite(*signDataBufer , 1 , sign_len , signFp );
printf("Write sign file success\n");
fclose( signFp );
}
publicFp = fopen(PUBLIC_KEY_PATH, "r");
if (publicFp != NULL)
{
pub_rsa = PEM_read_RSA_PUBKEY(publicFp, &pub_rsa,NULL,NULL);
verified = RSA_verify(NID_sha1 , dataToSign, msgLen, *signDataBufer, sign_len, pub_rsa);
if(verified)
{
printf("Public Key verified successfully : %d\n",verified);
}
else
{
printf("Public Key verify Failed !!!!! : %d\n",verified);
}
fclose(publicFp);
RSA_free(pub_rsa);
}
else
{
printf("Public key not found\n");
}
}
fclose(fp);
RSA_free(rsa);
}
else
{
logErrorC("Could not open file %s\n",PRIVATE_KEY_PATH);
}
return sign_len;
也许您可以提供成功代码的输出和失败命令的日志,以帮助我们帮助您;)您的代码在函数外部至少有一个
return
语句。它不是SSCCE。此代码看起来可疑:*SignDataBuffer=(char*)malloc(keySize)代码>显示的代码中不需要char**
。也许您应该发布您实际使用的代码。