RSA公钥格式公钥结构解析

一次发现RSA der格式公钥2048位(256bytes)有的长度292有的长度294于是分析了下:

[root@8f64ba75cbd1 tmp]# ll anewpub.der 1_pub.der 
-rw------- 1 root root 294 Apr  8 02:48 1_pub.der
-rw------- 1 root root 292 Apr  8 02:25 anewpub.der
[root@8f64ba75cbd1 tmp]#
[root@8f64ba75cbd1 tmp]# hexdump -C anewpub.der
00000000  30 82 01 20 30 0d 06 09  2a 86 48 86 f7 0d 01 01  |0.. 0...*.H.....|
00000010  01 05 00 03 82 01 0d 00  30 82 01 08 02 82 01 01  |........0.......|
00000020  00 e4 94 de 63 55 28 cc  e5 4f 41 28 ee b4 db 67  |....cU(..OA(...g|
00000030  6a 5a fb 1f 92 7a 07 b6  ff 5b 27 b1 00 2d 85 f3  |jZ...z...['..-..|
00000040  84 6e ed 32 d2 f9 55 36  52 9d 84 bb a8 6d 42 ed  |.n.2..U6R....mB.|
00000050  51 e4 34 99 83 62 b6 ed  86 27 bd 9b e7 91 b5 fb  |Q.4..b...'......|
00000060  8c b5 18 12 c9 e6 53 5f  69 b7 71 8b ea fb 88 f6  |......S_i.q.....|
00000070  5b ed fc 9c aa 2e 33 12  1c 7d 2b 6d f8 65 9c b2  |[.....3..}+m.e..|
00000080  62 21 a0 6f 21 d3 fa 9a  44 8b 6f 8d c4 08 2d 4a  |b!.o!...D.o...-J|
00000090  43 17 24 e4 c5 3f 53 cc  3a 4f 98 24 35 8b fa 36  |C.$..?S.:O.$5..6|
000000a0  54 71 5f 40 52 eb b8 e6  77 d5 bb 0b 2e db ae 99  |Tq_@R...w.......|
000000b0  b3 52 5f 4b 45 6b 79 3b  50 79 25 1e b7 e4 30 b4  |.R_KEky;Py%...0.|
000000c0  b1 a9 b2 dc 0d 41 05 e7  41 65 2a f8 fd 40 4b 34  |.....A..Ae*..@K4|
000000d0  32 d4 f3 95 38 99 72 29  f0 44 41 a5 06 d7 9b 94  |2...8.r).DA.....|
000000e0  a8 cd a2 e6 d4 e9 06 2a  c6 67 71 57 9c 73 b0 86  |.......*.gqW.s..|
000000f0  4e 06 71 ce 31 2d 90 27  69 47 95 46 58 c0 11 eb  |N.q.1-.'iG.FX...|
00000100  0e cf 77 13 8e e2 c8 32  e1 8f c4 a1 18 6e 13 22  |..w....2.....n."|
00000110  2a 18 b4 de 93 4e 13 98  df 69 2f 46 74 69 74 ba  |*....N...i/Ftit.|
00000120  d3 02 01 03                                       |....|
00000124
[root@8f64ba75cbd1 tmp]#
[root@8f64ba75cbd1 tmp]# hexdump -C 1_pub.der 
00000000  30 82 01 22 30 0d 06 09  2a 86 48 86 f7 0d 01 01  |0.."0...*.H.....|
00000010  01 05 00 03 82 01 0f 00  30 82 01 0a 02 82 01 01  |........0.......|
00000020  00 9b 2c ad a0 45 68 f4  cf bc 76 be 15 aa 92 f9  |..,..Eh...v.....|
00000030  1b 52 92 68 a1 78 a0 ba  3c 36 d2 14 fc fe 7c a0  |.R.h.x..<6....|.|
00000040  4e 24 d8 2d 69 a6 b3 9c  60 b6 92 ba 12 0a 45 6d  |N$.-i...`.....Em|
00000050  8f e4 52 7a 9d d3 67 cf  bd d5 aa 65 b5 0d 79 bf  |..Rz..g....e..y.|
00000060  d8 77 e8 b7 04 0d c5 c6  33 50 6a e2 f6 91 dc 3e  |.w......3Pj....>|
00000070  01 fb db f8 e7 62 20 78  9c 96 ea 39 da 75 87 97  |.....b x...9.u..|
00000080  3a 38 b3 73 50 57 ab 98  1f 2e 66 f3 c3 7a ee e7  |:8.sPW....f..z..|
00000090  28 36 b3 7b 69 66 fb fc  c0 7e 92 fb 4f 08 5d c4  |(6.{if...~..O.].|
000000a0  39 76 3b e5 0b e2 38 86  a8 e5 d2 c7 38 c8 8a 86  |9v;...8.....8...|
000000b0  49 68 dd 2a 0e d9 27 ee  e3 78 d1 f9 e0 1f 18 88  |Ih.*..'..x......|
000000c0  23 09 4c ec 59 e6 e0 d7  ef b7 3d 98 aa f1 41 ed  |#.L.Y.....=...A.|
000000d0  eb 28 68 38 2e 91 82 de  ac 20 f5 7c f1 37 a6 4f  |.(h8..... .|.7.O|
000000e0  05 dd 8b 51 cf f1 83 80  41 cc 35 3a dc a9 ae 57  |...Q....A.5:...W|
000000f0  2b cf b6 ba 45 e5 e3 9a  26 82 aa cb 30 5f 87 1b  |+...E...&...0_..|
00000100  29 2e e4 a5 ef 8e 6b 1e  c7 13 60 33 af 95 71 57  |).....k...`3..qW|
00000110  bf 20 07 b3 81 b7 aa 15  10 a1 81 f4 d3 4e 38 ee  |. ...........N8.|
00000120  bb 02 03 01 00 01                                 |......|
00000126
[root@8f64ba75cbd1 tmp]#
[root@8f64ba75cbd1 tmp]# openssl rsa -in anewpub.der -pubin -text -noout
Public-Key: (2048 bit)
Modulus:
    00:e4:94:de:63:55:28:cc:e5:4f:41:28:ee:b4:db:
    67:6a:5a:fb:1f:92:7a:07:b6:ff:5b:27:b1:00:2d:
    85:f3:84:6e:ed:32:d2:f9:55:36:52:9d:84:bb:a8:
    6d:42:ed:51:e4:34:99:83:62:b6:ed:86:27:bd:9b:
    e7:91:b5:fb:8c:b5:18:12:c9:e6:53:5f:69:b7:71:
    8b:ea:fb:88:f6:5b:ed:fc:9c:aa:2e:33:12:1c:7d:
    2b:6d:f8:65:9c:b2:62:21:a0:6f:21:d3:fa:9a:44:
    8b:6f:8d:c4:08:2d:4a:43:17:24:e4:c5:3f:53:cc:
    3a:4f:98:24:35:8b:fa:36:54:71:5f:40:52:eb:b8:
    e6:77:d5:bb:0b:2e:db:ae:99:b3:52:5f:4b:45:6b:
    79:3b:50:79:25:1e:b7:e4:30:b4:b1:a9:b2:dc:0d:
    41:05:e7:41:65:2a:f8:fd:40:4b:34:32:d4:f3:95:
    38:99:72:29:f0:44:41:a5:06:d7:9b:94:a8:cd:a2:
    e6:d4:e9:06:2a:c6:67:71:57:9c:73:b0:86:4e:06:
    71:ce:31:2d:90:27:69:47:95:46:58:c0:11:eb:0e:
    cf:77:13:8e:e2:c8:32:e1:8f:c4:a1:18:6e:13:22:
    2a:18:b4:de:93:4e:13:98:df:69:2f:46:74:69:74:
    ba:d3
Exponent: 3 (0x3)
[root@8f64ba75cbd1 tmp]#
[root@8f64ba75cbd1 tmp]# 
[root@8f64ba75cbd1 tmp]# 
[root@8f64ba75cbd1 tmp]# openssl rsa -in 1_pub.der -pubin -text -noout
Public-Key: (2048 bit)
Modulus:
    00:9b:2c:ad:a0:45:68:f4:cf:bc:76:be:15:aa:92:
    f9:1b:52:92:68:a1:78:a0:ba:3c:36:d2:14:fc:fe:
    7c:a0:4e:24:d8:2d:69:a6:b3:9c:60:b6:92:ba:12:
    0a:45:6d:8f:e4:52:7a:9d:d3:67:cf:bd:d5:aa:65:
    b5:0d:79:bf:d8:77:e8:b7:04:0d:c5:c6:33:50:6a:
    e2:f6:91:dc:3e:01:fb:db:f8:e7:62:20:78:9c:96:
    ea:39:da:75:87:97:3a:38:b3:73:50:57:ab:98:1f:
    2e:66:f3:c3:7a:ee:e7:28:36:b3:7b:69:66:fb:fc:
    c0:7e:92:fb:4f:08:5d:c4:39:76:3b:e5:0b:e2:38:
    86:a8:e5:d2:c7:38:c8:8a:86:49:68:dd:2a:0e:d9:
    27:ee:e3:78:d1:f9:e0:1f:18:88:23:09:4c:ec:59:
    e6:e0:d7:ef:b7:3d:98:aa:f1:41:ed:eb:28:68:38:
    2e:91:82:de:ac:20:f5:7c:f1:37:a6:4f:05:dd:8b:
    51:cf:f1:83:80:41:cc:35:3a:dc:a9:ae:57:2b:cf:
    b6:ba:45:e5:e3:9a:26:82:aa:cb:30:5f:87:1b:29:
    2e:e4:a5:ef:8e:6b:1e:c7:13:60:33:af:95:71:57:
    bf:20:07:b3:81:b7:aa:15:10:a1:81:f4:d3:4e:38:
    ee:bb
Exponent: 65537 (0x10001)
[root@8f64ba75cbd1 tmp]#

其实就是e值的区别:
在这里插入图片描述
在这里插入图片描述

用代码转换pem公钥为der格式,得到长度只有268,分析发现是只包含了n、e值的结果,没有前面的算法oid信息。

unsigned char *outil_pem_to_der_pub(std::string in, int *len)
{
    int ret = 0;
    EVP_PKEY *key = NULL;
    unsigned char *out = NULL;
    do
    {
        CHECK(in.size() == 0)

        CALL_FUNC(key, outil_decode_EVPKEY_pub_from_pem(in), key == NULL)

        ret = i2d_PublicKey(key, &out);
        if (ret != 0)
        { // success
            *len = ret;
            break;
        }
        out = outil_pem_to_der_rsapub(in, len);
        if (out != NULL)
        { // success
            break;
        }
        CALL_FUNC(out, outil_pem_to_der_ecpub(in, len), out == NULL)
    } while (0);

    FREE_NOTNULL(key, EVP_PKEY_free)
    return out;
}

在这里插入图片描述
可能是第一步i2d_PublicKey就转换成功退出了,这个接口可能不会考虑oid等信息,只干n和e的值。
验证:
失败,因为参数in传入的是PKCS#8格式的公钥(后来才知道的)。

查阅资料,发现是有不同标准的公钥格式PKCS#1和PKCS#8(没有标明RSA):
在这里插入图片描述

[root@8f64ba75cbd1 openssl-1.1.1w]# cat anewpub.pem 
-----BEGIN PUBLIC KEY-----
MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKCAQEA2bxTTb31GPS58GUpGJ0h
WhZv6j/ujx9dfNWYuhp4fvbXTsEme/TUBQzS/zQbj2lutZq2pihiPDPYyDaXxDDM
Rfi8PJqziG2QmPX3orSJrqy2AHceVzCw6PX+Pe1KKeSP01Rm4VZNMIqJ8kHw+HnQ
IRiFWEGSRsLbKvG1dzEQK7GReSEVsZC7aEqdJVoIlZGxgLzVTLlTqM9p989TvIBT
fFgQATJx1z42Va/icMEsgN7aYlYvOR+EBhMI2MCQ1N2iJubsPujs/khd1IcoalAk
8fOs+eMt1Hq/sGXbfas3hHwM5qIiicV1mDTF0Kn6H5t2OiXG3zpO31Gv6uysigK4
fQIBAw==
-----END PUBLIC KEY-----
[root@8f64ba75cbd1 openssl-1.1.1w]#
[root@8f64ba75cbd1 openssl-1.1.1w]# 
[root@8f64ba75cbd1 openssl-1.1.1w]# openssl rsa -pubin -in anewpub.der -RSAPublicKey_out -out anewpubPKCS1.pem
writing RSA key
[root@8f64ba75cbd1 openssl-1.1.1w]# 
[root@8f64ba75cbd1 openssl-1.1.1w]# cat anewpubPKCS1.pem 
-----BEGIN RSA PUBLIC KEY-----
MIIBCAKCAQEA2bxTTb31GPS58GUpGJ0hWhZv6j/ujx9dfNWYuhp4fvbXTsEme/TU
BQzS/zQbj2lutZq2pihiPDPYyDaXxDDMRfi8PJqziG2QmPX3orSJrqy2AHceVzCw
6PX+Pe1KKeSP01Rm4VZNMIqJ8kHw+HnQIRiFWEGSRsLbKvG1dzEQK7GReSEVsZC7
aEqdJVoIlZGxgLzVTLlTqM9p989TvIBTfFgQATJx1z42Va/icMEsgN7aYlYvOR+E
BhMI2MCQ1N2iJubsPujs/khd1IcoalAk8fOs+eMt1Hq/sGXbfas3hHwM5qIiicV1
mDTF0Kn6H5t2OiXG3zpO31Gv6uysigK4fQIBAw==
-----END RSA PUBLIC KEY-----
[root@8f64ba75cbd1 openssl-1.1.1w]#
[root@8f64ba75cbd1 openssl-1.1.1w]# 
[root@8f64ba75cbd1 openssl-1.1.1w]# openssl rsa -pubin -in anewpubPKCS1.pem -outform DER -out anewpubPKCS1.der
writing RSA key
[root@8f64ba75cbd1 openssl-1.1.1w]# ll anewpubPKCS1.der 
-rw------- 1 root root 292 Apr  8 06:15 anewpubPKCS1.der
[root@8f64ba75cbd1 openssl-1.1.1w]# openssl rsa -pubin -in anewpubPKCS1.pem -RSAPublicKey_out -outform DER -out anewpubPKCS1.der
writing RSA key
[root@8f64ba75cbd1 openssl-1.1.1w]# ll anewpubPKCS1.der
-rw------- 1 root root 268 Apr  8 06:15 anewpubPKCS1.der
[root@8f64ba75cbd1 openssl-1.1.1w]#
[root@8f64ba75cbd1 openssl-1.1.1w]#

看看有没有代码接口可以调用:
测试出来了:

EVP_PKEY *GenerateRSAKey(unsigned int bits)
{
    size_t pri_len = 0;   // 私钥长度
    size_t pub_len = 0;   // 公钥长度
    unsigned char *pri_key = NULL; // 私钥
    unsigned char *pub_key = NULL; // 公钥
    RSA *rsa = NULL;
    BIO *pri = NULL;
    BIO *pub = NULL;
    int ret = 0;
    EVP_PKEY *evpk = NULL;
    do
    {
        // 生成密钥对
        CALL_FUNC(rsa, RSA_generate_key(bits, RSA_3, NULL, NULL), rsa == NULL)

        CALL_FUNC(evpk, EVP_PKEY_new(), evpk == NULL)

        CALL_FUNC(ret, EVP_PKEY_set1_RSA(evpk, rsa), ret == 0)

#if 1
        pri = BIO_new(BIO_s_mem());
        CHECK(pri == NULL)
        
        
        // 生成私钥
        ret = PEM_write_bio_RSAPrivateKey(pri, rsa, NULL, NULL, 0, NULL, NULL);
        CHECK(ret <= 0)

        // 注意------生成第1种格式的公钥
        pub = BIO_new(BIO_s_mem());
        CHECK(pub == NULL)
        ret = PEM_write_bio_RSAPublicKey(pub, rsa);
        CHECK(ret <= 0)
        pub_len = BIO_pending(pub);
        pub_key = (unsigned char *)malloc(pub_len + 1);
        CHECK(pub_key == NULL)
        ret = BIO_read(pub, pub_key, pub_len);
        CHECK(ret <= 0)
        pub_key[pub_len] = 0;
        printf("type1:\n%s\n",(char*)pub_key);
        // 注意------生成第2种格式的公钥(此处代码中使用这种)
        BIO_free(pub);
        pub = BIO_new(BIO_s_mem());
        CHECK(pub == NULL)
        ret = PEM_write_bio_RSA_PUBKEY(pub, rsa);
        CHECK(ret <= 0)
        pub_len = BIO_pending(pub);
        free(pub_key);
        pub_key = (unsigned char *)malloc(pub_len + 1);
        CHECK(pub_key == NULL)
        ret = BIO_read(pub, pub_key, pub_len);
        CHECK(ret <= 0)
        pub_key[pub_len] = 0;
        printf("type2:\n%s\n",(char*)pub_key);
        //type 3 PKCS1
        free(pub_key);
        pub_key = NULL;
        pub_len = i2d_RSA_PUBKEY(rsa,&pub_key);
        print_hex("rsa pub type 3",pub_key,pub_len);
        //type 4 PKCS8
        free(pub_key);
        pub_key = NULL;
        pub_len = i2d_PublicKey(evpk,&pub_key);
        print_hex("rsa pub type 4",pub_key,pub_len);
        //type 5 PKCS1
        free(pub_key);
        pub_key = NULL;
        pub_len = i2d_PUBKEY(evpk,&pub_key);
        print_hex("rsa pub type 5",pub_key,pub_len);
        //type 6 PKCS8
        free(pub_key);
        pub_key = NULL;
        pub_len = i2d_RSAPublicKey(rsa,&pub_key);
        print_hex("rsa pub type 6",pub_key,pub_len);

        // 获取长度
        pri_len = BIO_pending(pri);
        // 密钥对读取到字符串
        pri_key = (unsigned char *)malloc(pri_len + 1);
        CHECK(pri_key == NULL)
        ret = BIO_read(pri, pri_key, pri_len);
        CHECK(ret <= 0)

#endif
    } while (0);

    // 释放内存
    FREE_NOTNULL(rsa, RSA_free)
    FREE_NOTNULL(pub, BIO_free)
    FREE_NOTNULL(pri, BIO_free)
    FREE_NOTNULL(pri_key, free)
    FREE_NOTNULL(pub_key, free)
    return evpk;
}
[root@8f64ba75cbd1 openssl-1.1.1w]# ./main
type1:
-----BEGIN RSA PUBLIC KEY-----
MIIBCAKCAQEAuXjWEMiuRgd2K8gLtr0ntUzJpvQdrKa2yflUSwM1I6jYgS8BnlcP
UJhVqp2ex7E3LSUg0A6t1jyH6EoS6CQ2qYUIz4STw77UH/8NJcpxoFg9fFTueoiv
MQl4OG45gehugCGYC8RF/Ug4ukQ4TULJARcLI7ynKOq95PGSelqmBe6qoZtfRFdL
P2+43ytsl8bnos6PQwbnmlVgShyFmbO42zPWNHnO153qi1GoxsbkVOgqQ/L2/xNB
8BQZp7Z+R2yzKEUjo5qmVo5BqWUPAh3+H4akoebPCJI0D3LqgZfOjRDLHhFYoL0a
m5khM2IwEDBrURvLtcHm4WO2vjP+OKa/6QIBAw==
-----END RSA PUBLIC KEY-----

type2:
-----BEGIN PUBLIC KEY-----
MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKCAQEAuXjWEMiuRgd2K8gLtr0n
tUzJpvQdrKa2yflUSwM1I6jYgS8BnlcPUJhVqp2ex7E3LSUg0A6t1jyH6EoS6CQ2
qYUIz4STw77UH/8NJcpxoFg9fFTueoivMQl4OG45gehugCGYC8RF/Ug4ukQ4TULJ
ARcLI7ynKOq95PGSelqmBe6qoZtfRFdLP2+43ytsl8bnos6PQwbnmlVgShyFmbO4
2zPWNHnO153qi1GoxsbkVOgqQ/L2/xNB8BQZp7Z+R2yzKEUjo5qmVo5BqWUPAh3+
H4akoebPCJI0D3LqgZfOjRDLHhFYoL0am5khM2IwEDBrURvLtcHm4WO2vjP+OKa/
6QIBAw==
-----END PUBLIC KEY-----

rsa pub type 3[len:292 | 0x124]
30 82 01 20 30 0d 06 09 2a 86 48 86 f7 0d 01 01 01 05 00 03 82 01 0d 00 30 82 01 08 02 82 01 01 00 b9 78 d6 10 c8 ae 46 07 76 2b c8 0b b6 bd 27 b5 4c c9 a6 f4 1d ac a6 b6 c9 f9 54 4b 03 3
5 23 a8 d8 81 2f 01 9e 57 0f 50 98 55 aa 9d 9e c7 b1 37 2d 25 20 d0 0e ad d6 3c 87 e8 4a 12 e8 24 36 a9 85 08 cf 84 93 c3 be d4 1f ff 0d 25 ca 71 a0 58 3d 7c 54 ee 7a 88 af 31 09 78 38 6e
 39 81 e8 6e 80 21 98 0b c4 45 fd 48 38 ba 44 38 4d 42 c9 01 17 0b 23 bc a7 28 ea bd e4 f1 92 7a 5a a6 05 ee aa a1 9b 5f 44 57 4b 3f 6f b8 df 2b 6c 97 c6 e7 a2 ce 8f 43 06 e7 9a 55 60 4a 
1c 85 99 b3 b8 db 33 d6 34 79 ce d7 9d ea 8b 51 a8 c6 c6 e4 54 e8 2a 43 f2 f6 ff 13 41 f0 14 19 a7 b6 7e 47 6c b3 28 45 23 a3 9a a6 56 8e 41 a9 65 0f 02 1d fe 1f 86 a4 a1 e6 cf 08 92 34 0
f 72 ea 81 97 ce 8d 10 cb 1e 11 58 a0 bd 1a 9b 99 21 33 62 30 10 30 6b 51 1b cb b5 c1 e6 e1 63 b6 be 33 fe 38 a6 bf e9 02 01 03
rsa pub type 4[len:268 | 0x10c]
30 82 01 08 02 82 01 01 00 b9 78 d6 10 c8 ae 46 07 76 2b c8 0b b6 bd 27 b5 4c c9 a6 f4 1d ac a6 b6 c9 f9 54 4b 03 35 23 a8 d8 81 2f 01 9e 57 0f 50 98 55 aa 9d 9e c7 b1 37 2d 25 20 d0 0e a
d d6 3c 87 e8 4a 12 e8 24 36 a9 85 08 cf 84 93 c3 be d4 1f ff 0d 25 ca 71 a0 58 3d 7c 54 ee 7a 88 af 31 09 78 38 6e 39 81 e8 6e 80 21 98 0b c4 45 fd 48 38 ba 44 38 4d 42 c9 01 17 0b 23 bc
 a7 28 ea bd e4 f1 92 7a 5a a6 05 ee aa a1 9b 5f 44 57 4b 3f 6f b8 df 2b 6c 97 c6 e7 a2 ce 8f 43 06 e7 9a 55 60 4a 1c 85 99 b3 b8 db 33 d6 34 79 ce d7 9d ea 8b 51 a8 c6 c6 e4 54 e8 2a 43 
f2 f6 ff 13 41 f0 14 19 a7 b6 7e 47 6c b3 28 45 23 a3 9a a6 56 8e 41 a9 65 0f 02 1d fe 1f 86 a4 a1 e6 cf 08 92 34 0f 72 ea 81 97 ce 8d 10 cb 1e 11 58 a0 bd 1a 9b 99 21 33 62 30 10 30 6b 5
1 1b cb b5 c1 e6 e1 63 b6 be 33 fe 38 a6 bf e9 02 01 03
rsa pub type 5[len:292 | 0x124]
30 82 01 20 30 0d 06 09 2a 86 48 86 f7 0d 01 01 01 05 00 03 82 01 0d 00 30 82 01 08 02 82 01 01 00 b9 78 d6 10 c8 ae 46 07 76 2b c8 0b b6 bd 27 b5 4c c9 a6 f4 1d ac a6 b6 c9 f9 54 4b 03 3
5 23 a8 d8 81 2f 01 9e 57 0f 50 98 55 aa 9d 9e c7 b1 37 2d 25 20 d0 0e ad d6 3c 87 e8 4a 12 e8 24 36 a9 85 08 cf 84 93 c3 be d4 1f ff 0d 25 ca 71 a0 58 3d 7c 54 ee 7a 88 af 31 09 78 38 6e
 39 81 e8 6e 80 21 98 0b c4 45 fd 48 38 ba 44 38 4d 42 c9 01 17 0b 23 bc a7 28 ea bd e4 f1 92 7a 5a a6 05 ee aa a1 9b 5f 44 57 4b 3f 6f b8 df 2b 6c 97 c6 e7 a2 ce 8f 43 06 e7 9a 55 60 4a 
1c 85 99 b3 b8 db 33 d6 34 79 ce d7 9d ea 8b 51 a8 c6 c6 e4 54 e8 2a 43 f2 f6 ff 13 41 f0 14 19 a7 b6 7e 47 6c b3 28 45 23 a3 9a a6 56 8e 41 a9 65 0f 02 1d fe 1f 86 a4 a1 e6 cf 08 92 34 0
f 72 ea 81 97 ce 8d 10 cb 1e 11 58 a0 bd 1a 9b 99 21 33 62 30 10 30 6b 51 1b cb b5 c1 e6 e1 63 b6 be 33 fe 38 a6 bf e9 02 01 03
rsa pub type 6[len:268 | 0x10c]
30 82 01 08 02 82 01 01 00 b9 78 d6 10 c8 ae 46 07 76 2b c8 0b b6 bd 27 b5 4c c9 a6 f4 1d ac a6 b6 c9 f9 54 4b 03 35 23 a8 d8 81 2f 01 9e 57 0f 50 98 55 aa 9d 9e c7 b1 37 2d 25 20 d0 0e a
d d6 3c 87 e8 4a 12 e8 24 36 a9 85 08 cf 84 93 c3 be d4 1f ff 0d 25 ca 71 a0 58 3d 7c 54 ee 7a 88 af 31 09 78 38 6e 39 81 e8 6e 80 21 98 0b c4 45 fd 48 38 ba 44 38 4d 42 c9 01 17 0b 23 bc
 a7 28 ea bd e4 f1 92 7a 5a a6 05 ee aa a1 9b 5f 44 57 4b 3f 6f b8 df 2b 6c 97 c6 e7 a2 ce 8f 43 06 e7 9a 55 60 4a 1c 85 99 b3 b8 db 33 d6 34 79 ce d7 9d ea 8b 51 a8 c6 c6 e4 54 e8 2a 43 
f2 f6 ff 13 41 f0 14 19 a7 b6 7e 47 6c b3 28 45 23 a3 9a a6 56 8e 41 a9 65 0f 02 1d fe 1f 86 a4 a1 e6 cf 08 92 34 0f 72 ea 81 97 ce 8d 10 cb 1e 11 58 a0 bd 1a 9b 99 21 33 62 30 10 30 6b 5
1 1b cb b5 c1 e6 e1 63 b6 be 33 fe 38 a6 bf e9 02 01 03

type 1和type2是pem数据。
type 3 和 type 5 可以。
在这里插入图片描述

也就是
i2d_PUBKEY(evpk,&pub_key);和i2d_RSA_PUBKEY(rsa,&pub_key);结果是PKCS1格式的。
i2d_PublicKey(evpk,&pub_key);和i2d_RSAPublicKey(rsa,&pub_key);结果是PKCS8格式的。
而pem格式则是
PEM_write_bio_RSAPublicKey(pub, rsa);结果是PKCS1的
PEM_write_bio_RSA_PUBKEY(pub, rsa);结果是PKCS8的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/526339.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

为什么网站速度很重要?

网站速度&#xff0c;也被称为页面加载速度或网站性能&#xff0c;是指用户访问网站时&#xff0c;从发出请求到浏览器完全加载并显示网页内容所需的时间。这个速度的快慢直接影响用户的体验和对网站的整体评价。 为什么网站速度很重要&#xff1f; 网站速度之所以非常重要&a…

数仓调优实战:GUC参数调优

1. 前言 适用版本&#xff1a;【8.1.1及以上】 GaussDB(DWS)性能调优系列专题文章&#xff0c;介绍了数据库性能调优的思路和总体策略。在系统级调优中数据库全局的GUC参数对整体性能的提升至关重要&#xff0c;而在语句级调优中GUC参数可以调整估算模型&#xff0c;选择查询…

移动医保支付

传统就医流程中&#xff0c;涉及“三长一短”的难题&#xff0c;因此根据国家政策及互联网的能力支持&#xff0c;用户在微信或者支付宝上激活医保电子凭证之后&#xff0c;无需在医院窗口排队&#xff0c;即可通过微信小程序或者公众号、支付宝小程序缴纳医保挂号或医保门诊费…

Java常用API_System——常用方法及代码演示

1.System.exit(int status) 方法的形参int status为状态码&#xff0c;如果是0&#xff0c;说明虚拟机正常停止&#xff0c;如果非0&#xff0c;说明虚拟机非正常停止。需要将程序结束时可以调用这个方法 代码演示&#xff1a; public class Test {public static void main(S…

如何远程监控员工的电脑

如何远程监控员工的电脑 为什么要对员工使用电脑的行为进行监控呢&#xff1f;对企业来说是有其必要性的。其必要性主要体现以下4个方面。 1.数据安全与知识产权保护 防止数据泄露&#xff1a;企业内部往往存储着大量的敏感信息&#xff0c;如客户数据、财务资料、商业秘密、…

使用Code开发Django_模版和CSS

转到定义 和 查看定义 在使用Django或任何其他库的过程中&#xff0c;我们可能需要检查这些库中的代码。VS Code提供了两个方便的命令&#xff0c;可以直接导航到任何代码中的类和其他对象的定义&#xff1a; 转到定义 在Python开发环境中&#xff0c;我们可以轻松地对函数、类…

【QT学习】Graphics View框架(高阶篇)- 使用Graphics View框架创建开机动画

【QT学习】Graphics View框架&#xff08;高阶篇&#xff09;- 使用Graphics View框架创建开机动画_qgraphicsview 一步-CSDN博客 前言 在上一篇《Graphics View框架&#xff08;进阶篇&#xff09;- 派生QGraphicsItem类创建自定义图元item》中&#xff0c;我们介绍了创建自定…

助力AIGC暴雨推出4卡液冷图站TR770

2022年&#xff0c;ChatGPT横空出世&#xff0c;正式拉开了生成式人工智能&#xff08;AIGC&#xff09;的序幕&#xff1b;2024年&#xff0c;Sora惊艳亮相&#xff0c;再度将AIGC技术推向高潮&#xff0c;引发了全球范围内的新一轮科技竞赛与创新热潮。从文字创作的灵感迸发&…

图像处理环境配置opencv-python

下载python&#xff0c;配置pip使用清华源下载镜像&#xff1a; pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple 切换到python目录下&#xff0c;右击cmd&#xff0c;执行pip升级指令: python -m pip install --upgrade pip 下载opencv&#x…

“鲜花换冥币,文明寄哀思“张家口慈善义工联合会清明节活动

又是一年春草绿&#xff0c;梨花风起正清明。扫墓祭祖、缅怀先人是清明节的重要民俗活动&#xff0c;为摒弃传统陋习&#xff0c;树文明祭祀新风&#xff0c;2024年4月4日&#xff0c;张家口慈善义工联合会携手市人民公墓西祥园组织志愿者们开展以“鲜花换冥币&#xff0c;文明…

windows下使用的的数字取证工作工具套装:forensictools

推荐一套windows下使用的的数字取证工作工具套装&#xff1a;forensictools 部分工具包括&#xff1a; ▫️exiftool&#xff0c;一个命令行应用程序和 Perl 库&#xff0c;用于读写元信息。 ▫️YARA&#xff0c;一款开源工具&#xff0c;用于对恶意软件样本进行识别和分类。…

开源区块链系统/技术 总结(欢迎补充,最新)

1. FISCO BCOS FISCO BCOS 2.0 技术文档 — FISCO BCOS 2.0 v2.9.0 文档https://fisco-bcos-documentation.readthedocs.io/ 2. ChainMaker&#xff08;长安链&#xff09; 文档导航 — chainmaker-docs v2.3.2 documentationhttps://docs.chainmaker.org.cn/v2.3.2/html/in…

移动机器人运动规划 | 基于图搜索的Dijkstra 和 A*算法详解

Dijkstra 算法 Dijkstra 算法与BFS算法的区别就是 : 从容器中弹出接下来要访问的节点的规则不同 BFS 弹出: 层级最浅的原则&#xff0c;队列里最下方的元素 Dijkstra 弹出: 代价最小的节点g(n) g(n) :表示的是从开始节点到当前n节点的代价累加 Dijkstra在扩展的时候&#x…

深度挖掘商品信息,jd.item_get API助您呈现商品全面规格参数

深度挖掘商品信息&#xff0c;特别是在电商平台上&#xff0c;对于商家、开发者和用户来说都至关重要。jd.item_get API作为京东开放平台提供的一个强大工具&#xff0c;能够帮助用户轻松获取商品的全面规格参数&#xff0c;进而为商品分析、推荐、比较等提供有力的数据支撑。 …

arm64 - 系统调用

起因 群里做网络的小伙伴问了一个问题&#xff0c;他在wifi驱动的某个函数里加了dump stack&#xff0c;然后插入驱动&#xff0c;发现调用栈是这样的&#xff0c;为什么呢&#xff1f; 代码追溯 insmod这个app&#xff0c;是在busybox中的&#xff0c;所以找到busybox的代…

大话设计模式——13.外观模式(Facade Pattern)

简介 又称门面模式&#xff0c;为子系统中的一组接口提供一个一致的界面&#xff0c;外观模式定义了一个高层接口&#xff0c;这个接口使得这一子系统更加容易使用。 UML图 应用场景&#xff1a; 第三方SDK大多使用该模式&#xff0c;通过一个外观类&#xff0c;可对用户屏蔽…

蓝桥杯DFS-最大数字

解题思路 我们从最高位开始要利用自己的1号操作和2号操作保证当前这个数位的数一定要尽可能最大。 然后分别考虑两种操作&#xff0c;首先两种操作不可能混用&#xff0c;因为它们是抵消的效果&#xff0c;所以要么对这个数全使用1操作&#xff0c;要么2操作。假设某个数位的…

easyexcel处理复杂表头

需求&#xff0c;模板如下 功能如下 开始整活&#xff0c;依赖包。 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.2.1</version> </dependency>下载导入模板 1.方法 GetMapping…

详解FB广告三种受众类型,提升广告投放精准度

在Facebook广告中&#xff0c;精确地定位潜在客户至关重要。然而&#xff0c;达到完美精准度通常是一个逐渐逼近的过程&#xff0c;涉及到多次迭代和细化目标人群。Facebook提供了三种主要的受众类型&#xff1a;核心受众(Core Audiences)、自定义受众(Custom Audiences)和类似…

携手博鳌亚洲论坛,五粮液“以和美,敬世界”

执笔 | 尼 奥 编辑 | 扬 灵 3月26-29日&#xff0c;以“亚洲与世界&#xff1a;共同的挑战 共同的责任”为主题的博鳌亚洲论坛2024年年会在海南博鳌盛大召开&#xff0c;聚集全球政商学媒等各国代表汇聚一堂&#xff0c;围绕投资亚洲未来、减少贸易碎片化、加速迈向零碳电…