Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.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 如何将椭圆曲线x和y转换为pem格式的公共证书_Openssl - Fatal编程技术网

Openssl 如何将椭圆曲线x和y转换为pem格式的公共证书

Openssl 如何将椭圆曲线x和y转换为pem格式的公共证书,openssl,Openssl,我有两个256位整数,它=secp256k1 ec密钥对的公钥 我正在寻找一种方法,从以十六进制格式提供给我的这两个值创建PEM证书 有人知道openssl是否有办法做到这一点吗?openssl公开了一个函数,您可以使用该函数将公钥写入PEM格式。您首先必须使用族中的函数构造公钥。下面的代码段输出了(我认为)您想要的stdout: #include <stdio.h> #include <openssl/ec.h> #include <openssl/pem.h&g

我有两个256位整数,它=secp256k1 ec密钥对的公钥

我正在寻找一种方法,从以十六进制格式提供给我的这两个值创建PEM证书


有人知道openssl是否有办法做到这一点吗?

openssl公开了一个函数,您可以使用该函数将公钥写入PEM格式。您首先必须使用族中的函数构造公钥。下面的代码段输出了(我认为)您想要的
stdout

#include <stdio.h>
#include <openssl/ec.h>
#include <openssl/pem.h>

const char *xHex = "053b5b02d673e6f115b538de3587318821149d3e7bc65903f300b8cfffcacdaa";
const char *yHex = "75e5d460e9d407672ff86683b748b6e882b361fa2fdf78845f8a9a369f6d016e";

int main(
    int argc,
    char **argv)
{
    EC_KEY *eckey = NULL;
    BIGNUM *x = NULL, *y = NULL;

    eckey = EC_KEY_new_by_curve_name(NID_secp256k1);

    BN_hex2bn(&x, xHex);
    BN_hex2bn(&y, yHex);

    EC_KEY_set_public_key_affine_coordinates(eckey, x, y);
    EC_KEY_set_asn1_flag(eckey, OPENSSL_EC_NAMED_CURVE);
    PEM_write_EC_PUBKEY(stdout, eckey);

    BN_free(x);
    BN_free(y);
    EC_KEY_free(eckey);
}
但是,您提供的坐标不位于曲线上,如以下命令所示:

$ openssl ec -pubin -in <(./eckey) -pubout -text -noout 
read EC key
unable to load Key
140735626654664:error:1006706B:elliptic curve routines:ec_GFp_simple_oct2point:point is not on curve:ecp_oct.c:417:
140735626654664:error:10098010:elliptic curve routines:o2i_ECPublicKey:EC lib:ec_asn1.c:1286:
140735626654664:error:100D708E:elliptic curve routines:ECKEY_PUB_DECODE:decode error:ec_ameth.c:208:
140735626654664:error:0B07707D:x509 certificate routines:X509_PUBKEY_get:public key decode error:x_pubkey.c:154:
140735626654664:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83:

$openssl ec-pubin-in由于您没有提及,您似乎没有关联的私钥?我有。我们有我认为是相关的私钥。我试图实现的一部分是将外部应用程序生成的这一点转换回一种格式,然后我可以验证它是否与私钥匹配。因此,我有:rHex=053B5B02D673E6F115B538DE35873188211149D3E7BC65903F300B8CFFFCACDAA sHex=75E5D460E9D40767F2FF8683B748B6E882B361FAFD78845F8A9A36D016您所说的是什么意思“公共证书”和“PEM证书”?你是指“PEM格式的公钥”吗?正确,我指的是PEM格式的公钥。我有一个应用程序,它读取私钥并向我返回r和s值,我认为这是一个未压缩的公钥(2 x 256位整数)(我说的是secp256k1)-现在是的,我可以使用私钥使用OpenSSL生成公钥,但我正在尝试确认从应用程序返回的r和s值实际上可以用作有效的公共证书。谢谢,这非常有帮助。我99%确定您的答案是正确的,我将在今天晚些时候运行c后标记为已接受两个测试。再次感谢您花时间回答这个详细级别的问题。所以我肯定这将是一个完全没有问题的问题,但我正在尝试编译您上面的代码。我在ubuntu机器上安装了openssl头,将代码放入一个文件中,当我对其运行gcc时,我得到以下错误:pub.c:(.text+0x24):未定义的引用
EC_KEY\u new_by_curve_name'pub.c:(.text+0x3e):未定义的引用
BN_hex2bn'pub.c:(.text+0x54):未定义的引用
BN_hex2bn'pub.c:(.text+0x6b):未定义的引用
EC_KEY\u set_public_KEY\u仿射坐标'pub.c:(.text+0x7c):未定义对
EC\u KEY\u set\u asn1\u flag'pub.c:(.text+0x92):未定义对
PEM\u write\u EC\u PUBKEY'pub.c:(.text+0x9e):未定义对
BN\u free'pub.c:(.text+0xaa):未定义对
BN\u free'pub.c:(.text+0xb6)的引用:未定义对“EC_KEY_free”的引用您需要在链接时使用
-lcrypto
标志与OpenSSL加密库链接,并使用
-L
指示在何处找到它。我没有找到任何关于此的OpenSSL文档,但此问题的公认答案可能会帮助您前进:再近一步,我可以完成但是当我尝试运行应用程序时,我得到了一个核心转储。错误似乎是:0x00007f2d52839146,位于/lib/x86_64-linux-gnu/libcrypto.so.1.0.0中的BN_set_word()中
$ openssl ec -pubin -in <(./eckey) -pubout -text -noout 
read EC key
unable to load Key
140735626654664:error:1006706B:elliptic curve routines:ec_GFp_simple_oct2point:point is not on curve:ecp_oct.c:417:
140735626654664:error:10098010:elliptic curve routines:o2i_ECPublicKey:EC lib:ec_asn1.c:1286:
140735626654664:error:100D708E:elliptic curve routines:ECKEY_PUB_DECODE:decode error:ec_ameth.c:208:
140735626654664:error:0B07707D:x509 certificate routines:X509_PUBKEY_get:public key decode error:x_pubkey.c:154:
140735626654664:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_oth.c:83: