openssl rsa密钥

#include <boost/asio/ssl.hpp>
#include
#if defined(WINDOWS)
#if (OPENSSL_VERSION_NUMBER >= 0x10101000L)
#pragma comment(lib,“libcrypto.lib”)
#pragma comment(lib,“libssl.lib”)
#else
#pragma comment(lib,“libeay32.lib”)
#pragma comment(lib,“ssleay32.lib”)
#endif
#endif

#define KEY_LENGTH 2048 // 密钥长度
#define PUB_KEY_FILE “./pubkey.pem” // 公钥路径
#define PRI_KEY_FILE “./prikey.pem” // 私钥路径

/*
制造密钥对:私钥和公钥
/
void GenerateRSAKey(std::string& out_pub_key, std::string& out_pri_key)
{
size_t pri_len = 0; // 私钥长度
size_t pub_len = 0; // 公钥长度
char
pri_key = nullptr; // 私钥
char
pub_key = nullptr; // 公钥
// 生成密钥对
RSA* keypair = RSA_generate_key(KEY_LENGTH, RSA_3, NULL, NULL);
BIO* pri = BIO_new(BIO_s_mem());
BIO* pub = BIO_new(BIO_s_mem());
// 生成私钥
PEM_write_bio_RSAPrivateKey(pri, keypair, NULL, NULL, 0, NULL, NULL);
// 注意------生成第1种格式的公钥
//PEM_write_bio_RSAPublicKey(pub, keypair);
// 注意------生成第2种格式的公钥(此处代码中使用这种)
PEM_write_bio_RSA_PUBKEY(pub, keypair);
// 获取长度
pri_len = BIO_pending(pri);
pub_len = BIO_pending(pub);
// 密钥对读取到字符串
pri_key = (char*)malloc(pri_len + 1);
pub_key = (char*)malloc(pub_len + 1);
BIO_read(pri, pri_key, pri_len);
BIO_read(pub, pub_key, pub_len);
pri_key[pri_len] = ‘\0’;
pub_key[pub_len] = ‘\0’;
out_pub_key = pub_key;
out_pri_key = pri_key;
// 将公钥写入文件
std::ofstream pub_file(PUB_KEY_FILE, std::ios::out);
if (!pub_file.is_open())
{
perror(“pub key file open fail:”);
return;
}
pub_file << pub_key;
pub_file.close();
// 将私钥写入文件
std::ofstream pri_file(PRI_KEY_FILE, std::ios::out);
if (!pri_file.is_open())
{
perror(“pri key file open fail:”);
return;
}
pri_file << pri_key;
pri_file.close();
// 释放内存
RSA_free(keypair);
BIO_free_all(pub);
BIO_free_all(pri);
free(pri_key);
free(pub_key);
}
int main()
{
std::string pub_key;
std::string pri_key;
GenerateRSAKey(pub_key, pri_key);
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Juniper基础系列之一---vlan的建立

VLAN是交换机最重要的一个功能。EX交换机关于VLAN配置的菜单有三层&#xff0c;首先是vlans菜单层次&#xff0c;在vlans&#xff08;通过edit vlans可以进入vlans菜单里面&#xff09;里面可以创建vlan&#xff0c;而创建vlan的时候可以指定名字和vlan id。 在EX端口下面&…

魔兽争霸3地图(WarIII Maps):三国猛兽传

魔兽争霸3地图&#xff08;WarIII Maps&#xff09;&#xff1a;三国猛兽传三国猛兽传三国时期&#xff0c;连年战乱&#xff0c;天降异象&#xff0c;所有战力无双的英雄&#xff0c;外表全都变成了凶悍的猛兽…………其貌虽毁&#xff0c;其心不改攻城略地&#xff0c;百战成…

Linux下Redis的安装、配置操作说明

Redis 是一个高性能的key-value数据库。 redis的出现&#xff0c;很大程度补偿了memcached这类keyvalue存储的不足&#xff0c;在部分场合可以对关系数据库起到很好的补充作用。它提供了Python&#xff0c;Ruby&#xff0c;Erlang&#xff0c;PHP客户端&#xff0c;使用很方便。…

提取ip和端口

#include int main() { std::string str “192.168.9:8086”; std::string buffer1; buffer1.resize(128); int port 0; sscanf(str.c_str(), “%[^:]:%d”, &buffer1[0],&port); //std::string str “https://192.168.9:8086/test”; //std::string buffer1; //b…

Oracle SQL语句执行步骤

Oracle中SQL语句执行过程中,Oracle内部解析原理如下: 1、当一用户第一次提交一个SQL表达式时,Oracle会将这SQL进行Hard parse,这过程有点像程序编译,检查语法、表名、字段名等相关信息&#xff08;如下图&#xff09;&#xff0c;这过程会花比较长的时间&#xff0c;因为它要分…

字节流及字节对齐

#include #pragma pack(push,4) struct MyStruct { unsigned char a;// unsigned int b; //到这里是&#xff0c;加起来等于unsigned int 字节的倍数 unsigned char Cbuffer[10];//char没有字节对齐 unsigned int d; }; #pragma pack() void EnCodePack(unsigned char*cSend…

Android平台各类恶意软件及病毒概览

原文请见:http://mobile.51cto.com/ahot-364267.htmAndroid平台中各类恶意软件及病毒概览<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />随着移动互联网的发展&#xff0c;作为当今最大的移动操作系统之一&#xff0c;Android已…

string封装

class String { public: String(const char*str NULL) { if (str NULL) { data_ new char[1]; data_[0] 0; //memset(data_, 0, sizeof(data_)); //数组越界&#xff0c;delete的时候&#xff0c;会影响内存回收变化&#xff0c;因此会导致程序崩溃 } else { data_ new ch…

vim高级技巧(split)_小花_新浪博客

vim高级技巧&#xff08;split&#xff09;_小花_新浪博客:res(ize) N 把当前窗口高度增加N个像素 :res(ize) -N 把当前窗口高度减少N个像素 :vertical res(ize) N 把当前窗口宽度增加N个像素 :vertical res(ize) -N 把当前窗口宽度减少N个像素等于是按下后,松开键盘,再按…

单链表反转和插入

#include struct node { int value -1; node* next_ptr nullptr; }; //创建结点 void create(int i, node** header_ptr) { node* current header_ptr; //第一个结点 if (current nullptr) { node ptr new node; ptr->value i; ptr->next_ptr nullptr; header…

liunx命令联系

1&#xff0c;liunx桌面和命令行之间的切换 init 3 init4 init5 2&#xff0c;liunx下用户的切换是su 用户 转载于:https://blog.51cto.com/lvjian118/1057319

测试boot库下I/O模型类型

#include #include #include <boost/asio.hpp> int main() { std::string output; #if defined(BOOST_ASIO_HAS_IOCP) output “iocp” ; #elif defined(BOOST_ASIO_HAS_EPOLL) output “epoll” ; #elif defined(BOOST_ASIO_HAS_KQUEUE) output “kqueue” ; #elif…

循环语句:For循环

Pascal中的for循环严格地建立在计数器基础上&#xff0c;循环每执行一次&#xff0c;计数器不是增加一个值就是减小一个值。 例子&#xff1a; vark,i: integer; beginK:0;for i:1 to 10 dok :ki;同样的for语句可以用正好相反的计数器来写&#xff1a; vark,i: integer; begink…

beast单元库的总结

1:凡是带有async_read 和async_write 开头都是阻塞的&#xff0c;因为在向socket底层读写缓冲区时&#xff0c;一定要读完指定的大小位置&#xff0c;因为底层写了一个for循环 2:如果要使用async_read_some开头的函数&#xff0c;一定要使用先读写包头&#xff0c;再读写包体的…

Ubuntu 找不到libc.so.6

2019独角兽企业重金招聘Python工程师标准>>> 在Ubuntu 上&#xff0c;其实这个库是存在的&#xff0c;只是地方换了&#xff0c;在"/lib/i386-linux-gnu/"下面&#xff0c;我们只需创建一个链接即可。使用下面的命令&#xff1a; rootubuntuJack:/lib/i3…

c++实现插入和冒泡排序

插入排序的最好的情况是O(n)&#xff0c;最坏的情况O(n^2),因此是稳定的 冒泡排序最好的情况是O(n)&#xff0c;最坏的情况O(n^2)因此是稳定的 //插入排序 void insert_sort(int* arr, int n) { int temp -1; for (int i1;i<n;i){ temp arr[i]; int j i - 1; //从后往前…

.net 动软代码生成器

http://www.maticsoft.com/codematic.aspx

c++实现二叉树操作

//前序 //用广度搜索 template void AVLTree::preOrder(AVLTreeNode* tree) const { /**********递归形式走/ //if (nullptr ! tree) //{ // cout << tree->key << " "; // preOrder(tree->left); // preOrder(tree->right); //} if (tree nu…

Centos下lnmp编译安装详细过程

整理下lnmp安装步骤&#xff1a; 相关软件用的lnmp一键安装的全包&#xff0c;懒得去到处找软件源 完整版&#xff1a;http://soft.vpser.net/lnmp/lnmp0.7-full.tar.gz(66.64MB) 1.系统安装必要软件 sudo -s LANGC yum -y install gcc gcc-c autoconf lib…

fstream下的读写操作

#include #include #include int main() { std::string path “D/ssss/reflection.hpp”; //这情况下&#xff0c;默认下是std::ios_base::in读入 trun:在打开时舍弃流的内容 std::ifstream open_file(path, std::ios_base::ate | std::ios_base::binary); std::size_t si…