openssl pem.h 中提供了关于pem格式密钥对的操作接口

通常使用.pem的格式文件来保存openssl 生成的密钥对;

在终端下 cat xxx.pem 可以看到

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

XXXX

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

密钥数据进行了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);}

在目标路径保存了生成的公钥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);}

从目标路径读取公钥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

转载于:https://www.cnblogs.com/cocoajin/p/6137651.html

openssl pem 生成公钥和私钥及文件相关推荐

  1. windows使用openssl生成公钥和私钥

    本文首先简单介绍一下openssl.接着描述如何在windows环境下简单使用openssl,并生成公钥和私钥.最后介绍使用了RSA非对称加密传输应用实例的微信小程序:密码盾. 一.openssl简介 ...

  2. RSA生成公钥与私钥

    首先需要安装 rsa : pip install rsa 生成公钥与私钥代码如下: import rsa # Create your tests here.#生成公钥和私钥 public_key, p ...

  3. Git简单生成生成公钥和私钥方法

    Git配置 Git安装完之后,需做最后一步配置.打开git bash,分别执行以下两句命令 git config --global user.name "用户名" git conf ...

  4. Git生成生成公钥和私钥

    Git配置 Git安装完之后,需做最后一步配置.打开git bash,分别执行以下两句命令 git config --global user.name "用户名" git conf ...

  5. Git简单生成公钥和私钥的方法及git ssh key配置

    Git简单生成公钥和私钥的方法 Git安装完之后,需做最后一步配置.打开git bash,分别执行以下两句命令 git config --global user.name "用户名" ...

  6. C#中用RSA算法生成公钥和私钥

    转自:https://www.cnblogs.com/micenote/p/7862989.html C#中用RSA算法生成公钥和私钥 方法一: 公钥密钥生成后,保存在同名文件夹下面,如下图: 公钥密 ...

  7. ssh生成公钥、私钥

    1.打开 git bash 或 命令行窗口 执行生成公钥和私钥的命令,并按三下回车 ssh-keygen -t ras 结果如下图: 2.查看生成的公钥和私钥 打开下图中 .pub文件即可得到公钥,复 ...

  8. web3j java版本生成公钥、私钥、地址等实例

    使用java版本的web3j生成公私钥等信息 web3j的java版本支持直接通过java代码生成以太坊钱包的公私钥地址等信息,生成的地址信息存放于本地文件当中.同时,提供了针对该文件的读取等操作. ...

  9. Git生成公钥、私钥以及ssh key配置

    一.公钥以及私钥的生成 首先设置Git 用户签名 1.打开安装好的Git Bash: 2.设置Git用户签名,执行以下命令: git config --global user.name 用户名 git ...

最新文章

  1. 破一个行业ERP的感想
  2. devc 能优化吗_SEO关键词推广要多少钱?关键词优化选择外包靠谱吗?
  3. 20165328 预备作业3 Linux安装及命令
  4. 浅谈WebGIS开放数据(矢量数据)
  5. Android开发之线程池管理ThreadPoolExecutor和Executors.newSingleThreadExecutor()
  6. C++获取一段算法程序耗时方法
  7. 25岁php,“最好的语言“ 25 岁了,PHP说要走向安全和开放!
  8. 二维均匀分布的边缘密度函数_理解概率密度函数
  9. 几个北大和南开学霸的公众号,值得学习
  10. Mysql优化(出自官方文档) - 第九篇(优化数据库结构篇)
  11. cass转换jpg_怎么把CAD图转换成清晰的JPG等其他格式图形文件
  12. oracle标准成本的维护,Oracle标准成本计算和平均成本计算比较
  13. Pyrene-PEG2000-RB,含有芘丁酸和罗丹明的PEG,Rhodamine-PEG2000-Pyrene
  14. 快速搜索Wox工具之Everything Service没有运行报错,解决办法!
  15. python将小数转化为二进制_Python实现的十进制小数与二进制小数相互转换功能
  16. php 应用截图,PHP应用:php使用CutyCapt实现网页截图保存的方法
  17. pandas中pd.groupby()的用法
  18. java curator_使用curator实现选举
  19. 考研—计算机网络—应用层
  20. PHP中打印九九乘法表

热门文章

  1. Krpano skin_settings解释
  2. 修改 MySQL 自增ID的起始值
  3. Mysql分析排序和锁阅读总结
  4. MySQL LIMIT 如何改写成Oracle limit
  5. mvc4 利用filters特性来 实现自己的权限验证 之二
  6. 《ArcGIS Engine+C#实例开发教程》第七讲 图层符号选择器的实现2
  7. BZOJ 1221: [HNOI2001] 软件开发(最小费用最大流)
  8. 电子工程师过去1年的点点滴滴
  9. UDP和TCP协议包大小的计算
  10. [散记]在西安之2月23秦阿房宫