openssl pem 生成公钥和私钥及文件
生活随笔
收集整理的這篇文章主要介紹了
openssl pem 生成公钥和私钥及文件
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
openssl pem.h 中提供了關(guān)于pem格式密鑰對的操作接口
通常使用.pem的格式文件來保存openssl 生成的密鑰對;
在終端下 cat xxx.pem 可以看到?
-----BEGIN RSA PRIVATE KEY-----
XXXX
-----END RSA PRIVATE KEY-----
密鑰數(shù)據(jù)進行了BASE64編碼
1. 示例:將生成的密鑰對保存成pem文件
void testWriteRSA2PEM() {//生成密鑰對RSA *r = RSA_new();int bits = 512;BIGNUM *e = BN_new();BN_set_word(e, 65537);RSA_generate_key_ex(r, bits, e, NULL);RSA_print_fp(stdout, r, 0);BIO *out;out = BIO_new_file("/Users/cocoajin/Desktop/opriv.pem","w");//這里生成的私鑰沒有加密,可選加密int ret = PEM_write_bio_RSAPrivateKey(out, r, NULL, NULL, 0, NULL, NULL);printf("writepri:%d\n",ret);BIO_flush(out);BIO_free(out);out = BIO_new_file("/Users/cocoajin/Desktop/opub.pem","w");ret = PEM_write_bio_RSAPublicKey(out, r);printf("writepub:%d\n",ret);BIO_flush(out);BIO_free(out);BN_free(e);RSA_free(r);}?在目標(biāo)路徑保存了生成的公鑰opub.pem和私鑰oprov.pem
?輸出日志
Private-Key: (512 bit) modulus:00:e6:96:f5:6f:4d:5e:c2:ad:0d:f5:13:45:99:55:ca:6f:84:4f:3a:56:52:e2:ee:a2:cc:73:77:07:e2:3d:0d:e3:0d:c0:6a:92:52:b6:c7:de:e2:d6:88:56:9e:92:99:91:dd:2d:06:c5:a8:f2:c1:79:8b:20:f9:73:0a:7a:28:93 publicExponent: 65537 (0x10001) privateExponent:00:ca:1b:92:6f:c5:de:c2:bf:2f:b6:98:f7:ad:d8:16:20:fc:54:fd:0a:e0:87:6b:26:62:10:ea:49:8c:b0:7a:d3:d8:28:b7:fb:15:f1:4e:95:9d:bf:31:3a:e0:f3:fa:24:d3:71:fd:b0:f5:cd:5c:25:d1:81:8c:01:e3:fb:c7:21 prime1:00:f6:d7:91:c4:1a:2f:eb:0b:c4:18:14:3b:fe:f6:0d:c1:11:94:ca:6c:06:fc:de:d7:19:ac:58:9d:36:16:fe:9b prime2:00:ef:25:07:75:76:4d:ac:19:aa:ed:e9:a7:1d:5d:b1:7d:1c:1a:ef:95:8f:2d:bc:8a:e7:93:f5:f8:15:69:61:69 exponent1:00:f4:d2:c0:6f:b8:ed:77:fa:16:87:2f:62:86:31:b3:58:9f:c0:6c:b8:92:81:b1:df:b4:45:fd:2a:08:60:ec:2b exponent2:00:b5:88:c1:69:bc:3d:67:f8:30:15:db:f9:5c:c4:63:d8:59:fe:64:82:7e:a6:b4:6a:29:32:db:53:d0:45:27:89 coefficient:0a:97:26:2f:e9:ca:b6:32:86:86:3b:5a:13:ea:5e:8d:79:77:b9:7a:30:41:c4:31:cb:02:0e:96:6b:1b:e5:c4 writepri:1 writepub:1 Program ended with exit code: 0 View Code?
2. 示例:從pem文件中獲取公鑰私鑰方式一(利用了BIO)
void testReadRSAFromPEM() {RSA *pubkey = RSA_new();RSA *prikey = RSA_new();BIO *pubio;BIO *priio;priio = BIO_new_file("/Users/cocoajin/Desktop/opriv.pem", "rb");prikey = PEM_read_bio_RSAPrivateKey(priio, &prikey, NULL, NULL);pubio = BIO_new_file("/Users/cocoajin/Desktop/opub.pem", "rb");pubkey = PEM_read_bio_RSAPublicKey(pubio, &pubkey, NULL, NULL);RSA_print_fp(stdout, pubkey, 0);RSA_print_fp(stdout, prikey, 0);RSA_free(pubkey);BIO_free(pubio);RSA_free(prikey);BIO_free(priio);}?從目標(biāo)路徑讀取公鑰opub.pem和私鑰opriv.pem
?輸出日志
Public-Key: (512 bit) Modulus:00:e6:96:f5:6f:4d:5e:c2:ad:0d:f5:13:45:99:55:ca:6f:84:4f:3a:56:52:e2:ee:a2:cc:73:77:07:e2:3d:0d:e3:0d:c0:6a:92:52:b6:c7:de:e2:d6:88:56:9e:92:99:91:dd:2d:06:c5:a8:f2:c1:79:8b:20:f9:73:0a:7a:28:93 Exponent: 65537 (0x10001) Private-Key: (512 bit) modulus:00:e6:96:f5:6f:4d:5e:c2:ad:0d:f5:13:45:99:55:ca:6f:84:4f:3a:56:52:e2:ee:a2:cc:73:77:07:e2:3d:0d:e3:0d:c0:6a:92:52:b6:c7:de:e2:d6:88:56:9e:92:99:91:dd:2d:06:c5:a8:f2:c1:79:8b:20:f9:73:0a:7a:28:93 publicExponent: 65537 (0x10001) privateExponent:00:ca:1b:92:6f:c5:de:c2:bf:2f:b6:98:f7:ad:d8:16:20:fc:54:fd:0a:e0:87:6b:26:62:10:ea:49:8c:b0:7a:d3:d8:28:b7:fb:15:f1:4e:95:9d:bf:31:3a:e0:f3:fa:24:d3:71:fd:b0:f5:cd:5c:25:d1:81:8c:01:e3:fb:c7:21 prime1:00:f6:d7:91:c4:1a:2f:eb:0b:c4:18:14:3b:fe:f6:0d:c1:11:94:ca:6c:06:fc:de:d7:19:ac:58:9d:36:16:fe:9b prime2:00:ef:25:07:75:76:4d:ac:19:aa:ed:e9:a7:1d:5d:b1:7d:1c:1a:ef:95:8f:2d:bc:8a:e7:93:f5:f8:15:69:61:69 exponent1:00:f4:d2:c0:6f:b8:ed:77:fa:16:87:2f:62:86:31:b3:58:9f:c0:6c:b8:92:81:b1:df:b4:45:fd:2a:08:60:ec:2b exponent2:00:b5:88:c1:69:bc:3d:67:f8:30:15:db:f9:5c:c4:63:d8:59:fe:64:82:7e:a6:b4:6a:29:32:db:53:d0:45:27:89 coefficient:0a:97:26:2f:e9:ca:b6:32:86:86:3b:5a:13:ea:5e:8d:79:77:b9:7a:30:41:c4:31:cb:02:0e:96:6b:1b:e5:c4 Program ended with exit code: 0 View Code?
3. 示例:從pem文件中讀取公鑰私鑰方式二(利用FILE)
void testPEMReadRSA() {RSA *pubkey = RSA_new();RSA *prikey = RSA_new();FILE *pubf = fopen("/Users/cocoajin/Desktop/opub.pem", "rb");pubkey = PEM_read_RSAPublicKey(pubf, &pubkey, NULL, NULL);FILE *prif = fopen("/Users/cocoajin/Desktop/opriv.pem", "rb");prikey = PEM_read_RSAPrivateKey(prif, &prikey, NULL, NULL);RSA_print_fp(stdout, pubkey, 0);RSA_print_fp(stdout, prikey, 0);fclose(pubf);fclose(prif);RSA_free(pubkey);RSA_free(prikey);}?輸出日志?
Public-Key: (512 bit) Modulus:00:e6:96:f5:6f:4d:5e:c2:ad:0d:f5:13:45:99:55:ca:6f:84:4f:3a:56:52:e2:ee:a2:cc:73:77:07:e2:3d:0d:e3:0d:c0:6a:92:52:b6:c7:de:e2:d6:88:56:9e:92:99:91:dd:2d:06:c5:a8:f2:c1:79:8b:20:f9:73:0a:7a:28:93 Exponent: 65537 (0x10001) Private-Key: (512 bit) modulus:00:e6:96:f5:6f:4d:5e:c2:ad:0d:f5:13:45:99:55:ca:6f:84:4f:3a:56:52:e2:ee:a2:cc:73:77:07:e2:3d:0d:e3:0d:c0:6a:92:52:b6:c7:de:e2:d6:88:56:9e:92:99:91:dd:2d:06:c5:a8:f2:c1:79:8b:20:f9:73:0a:7a:28:93 publicExponent: 65537 (0x10001) privateExponent:00:ca:1b:92:6f:c5:de:c2:bf:2f:b6:98:f7:ad:d8:16:20:fc:54:fd:0a:e0:87:6b:26:62:10:ea:49:8c:b0:7a:d3:d8:28:b7:fb:15:f1:4e:95:9d:bf:31:3a:e0:f3:fa:24:d3:71:fd:b0:f5:cd:5c:25:d1:81:8c:01:e3:fb:c7:21 prime1:00:f6:d7:91:c4:1a:2f:eb:0b:c4:18:14:3b:fe:f6:0d:c1:11:94:ca:6c:06:fc:de:d7:19:ac:58:9d:36:16:fe:9b prime2:00:ef:25:07:75:76:4d:ac:19:aa:ed:e9:a7:1d:5d:b1:7d:1c:1a:ef:95:8f:2d:bc:8a:e7:93:f5:f8:15:69:61:69 exponent1:00:f4:d2:c0:6f:b8:ed:77:fa:16:87:2f:62:86:31:b3:58:9f:c0:6c:b8:92:81:b1:df:b4:45:fd:2a:08:60:ec:2b exponent2:00:b5:88:c1:69:bc:3d:67:f8:30:15:db:f9:5c:c4:63:d8:59:fe:64:82:7e:a6:b4:6a:29:32:db:53:d0:45:27:89 coefficient:0a:97:26:2f:e9:ca:b6:32:86:86:3b:5a:13:ea:5e:8d:79:77:b9:7a:30:41:c4:31:cb:02:0e:96:6b:1b:e5:c4 Program ended with exit code: 0 View Code?
4. 在終端下使用openssl命令生成公鑰私鑰
//生成1024位的RSA私鑰 openssl genrsa -out private.pem 1024//再由私鑰生成公鑰 openssl rsa -in private.pem -pubout -out public.pem//私鑰文件private.pem //公鑰文件public.pem //上面私鑰是沒加密的,可選加密,指定一個加密算法生成時輸入密碼?
以上測試使用openssl 1.1.0c
參考:https://www.openssl.org/docs/man1.1.0/crypto/PEM_read_bio_RSAPublicKey.html
轉(zhuǎn)載于:https://www.cnblogs.com/cocoajin/p/6137651.html
總結(jié)
以上是生活随笔為你收集整理的openssl pem 生成公钥和私钥及文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HTTP Content-Type类型
- 下一篇: Jersey框架三:Jersey对HTT