java私钥转字节数组_sm2命令行生成的公私钥要怎么转换成16进制的byte数组

gmssl pkey -in signkey.pem -outform DER -out keyout.der

为什么我用这个命令敲完后出现的是乱码?如下:

0w^B^A^A^D Ëx<8b>Ê©ìÕ8CG^M.<97><9f>¦/ß{^V¸E<80>RW¸>h<82>¢ñ=¨

2 ^F^H*<81>^\ÏU^A<82>-¡D^CB^@^D><8b>.<90>`»<9f>^]<8d>(/ñ^W'^A<96>óñÖeìü?&Mðݧ< 8f>l$fò» vª^]ýZ±<91><82>ü^YY­K^^¶<8b>b^]IbWÑ<9c>÷Ý<93>C^

倒是用:gmssl pkey -in signkey.pem -text -noout 这个命令生成了如下的,但是不能用的,我看GmSSL.java里面的公钥和私钥是一样长的。我生成的这个明显是公钥比较长

Private-Key: (256 bit)

priv:

cb:78:8b:ca:a9:ec:d5:38:43:47:0d:2e:97:9f:a6:

2f:df:7b:16:b8:45:80:52:57:b8:3e:68:82:a2:f1:

3d:a8

pub:

04:3e:8b:2e:90:60:bb:9f:1d:8d:28:2f:f1:17:27:

01:96:f3:f1:d6:65:ec:fc:3f:26:4d:f0:dd:a7:8f:

6c:24:66:f2:bb:a0:76:aa:1d:fd:5a:b1:91:82:fc:

19:59:ad:4b:1e:b6:5c:8b:62:1d:49:62:57:d1:9c:

f7:dd:93:43:5e

ASN1 OID: sm2p256v1

NIST CURVE: SM2

附录:signkey.pem的内容如下

-----BEGIN PRIVATE KEY-----

MIGHAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBG0wawIBAQQgy3iLyqns1ThDRw0u

l5+mL997FrhFgFJXuD5ogqLxPaihRANCAAQ+iy6QYLufHY0oL/EXJwGW8/HWZez8

PyZN8N2nj2wkZvK7oHaqHf1asZGC/BlZrUsetlyLYh1JYlfRnPfdk0Ne

-----END PRIVATE KEY-----

在GMSSL中,使用`EC_KEY`结构体表示SM2的密钥对,其中包含了公钥私钥。要将SM2私钥转换16进制字符串,可以使用`BIGNUM`结构体来表示SM2私钥,然后将其转换16进制字符串。 以下是将SM2私钥转换16进制字符串的示例代码: ```c #include <openssl/ec.h> #include <openssl/obj_mac.h> #include <openssl/bn.h> // 将SM2私钥转换16进制字符串 char *sm2_private_key_to_hex_string(EC_KEY *ec_key) { // 获取SM2私钥 const BIGNUM *private_key = EC_KEY_get0_private_key(ec_key); if (private_key == NULL) { return NULL; } // 将SM2私钥转换为字符串 char *private_key_str = BN_bn2hex(private_key); if (private_key_str == NULL) { return NULL; } // 将SM2私钥字符串转换16进制字符串 char *private_key_hex = OPENSSL_buf2hexstr((const unsigned char *)private_key_str, strlen(private_key_str)); OPENSSL_free(private_key_str); return private_key_hex; } ``` 使用示例: ```c // 生成SM2密钥对 EC_KEY *ec_key = EC_KEY_new_by_curve_name(NID_sm2); if (ec_key == NULL) { // 错误处理 } if (EC_KEY_generate_key(ec_key) == 0) { // 错误处理 } // 将SM2私钥转换16进制字符串 char *private_key_hex = sm2_private_key_to_hex_string(ec_key); if (private_key_hex == NULL) { // 错误处理 } printf("SM2私钥: %s\n", private_key_hex); // 释放内存 OPENSSL_free(private_key_hex); EC_KEY_free(ec_key); ``` 注意:以上示例代码仅供参考,实际使用时需要根据具体情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值