linux中的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 >

我已经在我的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 > 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**
。也许您应该发布您实际使用的代码。