Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
openssl RSA公钥与从C代码读取的密钥不匹配_C_Openssl_Public Key_Der - Fatal编程技术网

openssl RSA公钥与从C代码读取的密钥不匹配

openssl RSA公钥与从C代码读取的密钥不匹配,c,openssl,public-key,der,C,Openssl,Public Key,Der,我使用以下命令创建了公钥文件: openssl genrsa -out mykey.pem 2046 openssl rsa -in mykey.pem -pubout > mykey.pub 然后我从一些C代码中读到: public_key = PEM_read_RSA_PUBKEY(fp, NULL, NULL, NULL); 然后获取该公钥的DER格式: int len = i2d_RSAPublicKey (public_key, NULL); buf = (unsigned

我使用以下命令创建了公钥文件:

openssl genrsa -out mykey.pem 2046
openssl rsa -in mykey.pem -pubout > mykey.pub
然后我从一些C代码中读到:

public_key = PEM_read_RSA_PUBKEY(fp, NULL, NULL, NULL);
然后获取该公钥的DER格式:

int len = i2d_RSAPublicKey (public_key, NULL);
buf = (unsigned char *) malloc (len);
i2d_RSAPublicKey (public_key, &buf);
这里len==269

但是命令行openssl告诉我:

openssl rsa -outform der  -pubin -inform pem -in mykey.pub | wc
writing RSA key
       1      10     293
当我从openssl和我的C代码打印出DER表单时,它们显然不匹配,奇怪的是,我的C代码获得的DER有很多零


我可能做错了什么?

我应该使用i2d\u RSA\u PUBKEY()获取订单。另外,将&buf传递给该方法应该会警告我指针正在被修改。我不知道它为什么会被修改,也不知道它在通话后指向了什么

现在我知道了

der_form = throw_away = (unsigned char *) malloc (len);
i2d_RSAPublicKey (public_key, &throw_away);

并使用der_表单的内容。

我花了2个小时才找到这篇文章。我不知道为什么传入的指针会被修改,但这种两个指针的方法有效。