前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >用openssl库RSA加密解密

用openssl库RSA加密解密

作者头像
窗户
发布于 2018-02-07 06:36:53
发布于 2018-02-07 06:36:53
3.6K20
代码可运行
举报
文章被收录于专栏:窗户窗户
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 #include <stdio.h>
 2 #include <openssl/rsa.h>
 3 #include <openssl/pem.h>
 4 #include <openssl/err.h>
 5 
 6 //加密
 7 int my_encrypt(const char *input, int input_len,  char *output, int *output_len, const char *pri_key_fn)
 8 {
 9         RSA  *p_rsa = NULL;
10         FILE *file = NULL;
11         int ret = 0;
12 
13         if((file = fopen(pri_key_fn, "rb")) == NULL)
14         {
15                 ret = -1;
16                 goto End;
17         }
18 
19         if((p_rsa = PEM_read_RSAPrivateKey(file, NULL,NULL,NULL )) == NULL)
20         {
21                 ret = -2;
22                 goto End;
23         }
24 
25         if((*output_len = RSA_private_encrypt(input_len, (unsigned char*)input, (unsigned char*)output, p_rsa, RSA_PKCS1_PADDING)) < 0)
26         {
27                 ret = -4;
28                 goto End;
29         }
30 
31 End:
32         if(p_rsa != NULL)
33                 RSA_free(p_rsa);
34         if(file != NULL)
35                 fclose(file);
36 
37         return ret;
38 }
39 
40 //解密
41 int my_decrypt(const char *input, int input_len,  char *output, int *output_len, const char *pri_key_fn)
42 {
43         RSA  *p_rsa = NULL;
44         FILE *file = NULL;
45         int ret = 0;
46 
47         file = fopen(pri_key_fn, "rb");
48         if(!file)
49         {
50                 ret = -1;
51                 goto End;
52         }
53 
54         if((p_rsa = PEM_read_RSA_PUBKEY(file, NULL,NULL,NULL )) == NULL)
55         {
56                 ret = -2;
57                 goto End;
58         }
59 
60         if((*output_len=RSA_public_decrypt(input_len, (unsigned char*)input, (unsigned char*)output, p_rsa, RSA_PKCS1_PADDING)) < 0)
61         {
62                 ret = -3;
63                 goto End;
64         }
65 End:
66         if(p_rsa != NULL)
67                 RSA_free(p_rsa);
68         if(file != NULL)
69                 fclose(file);
70 
71         return ret;
72 }
73 
74 int main(int argc, char**argv)
75 {
76         char src[256];
77         char dst[256];
78         int src_len;
79         int dst_len;
80         int ret;
81         FILE *f;
82 
83         src_len = fread(src, 1, 256, stdin);
84 
85         if(argv[1][0] == 'e') {
86                 ret = my_encrypt(src, src_len,  dst, &dst_len, argv[2]);
87         }else {
88                 ret = my_decrypt(src, src_len,  dst, &dst_len, argv[2]);
89         }
90 
91         if(ret) {
92                 fprintf(stderr, "Error\n");
93         }
94         fwrite(dst,1,dst_len,stdout);
95         return ret;
96 }

以上是一个示例,测试了私钥加密(签名)/公钥解密(验证),main函数是一个测试

测试一下,先生成2048位公钥、私钥对

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
colin@colin-VirtualBox:/tmp$ openssl genrsa -out pri2048.pem 2048
Generating RSA private key, 2048 bit long modulus
................................+++
.............+++
e is 65537 (0x10001)
colin@colin-VirtualBox:/tmp$ openssl rsa -in pri2048.pem -pubout -out pub2048.pem
writing RSA key

编译、文件测试

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
colin@colin-VirtualBox:/tmp$ gcc t.c -lssl -lcrypto -lm
colin@colin-VirtualBox:/tmp$ ./a.out en pri2048.pem <data >data.en
colin@colin-VirtualBox:/tmp$ ./a.out enc pri2048.pem <data >data.en
colin@colin-VirtualBox:/tmp$ ./a.out dec pub2048.pem <data.en >data2
colin@colin-VirtualBox:/tmp$ openssl rsautl -verify -in data.en -inkey pub2048.pem -pubin -out data3

对比一下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
colin@colin-VirtualBox:/tmp$ cmp data data2
colin@colin-VirtualBox:/tmp$ cmp data data3
colin@colin-VirtualBox:/tmp$ md5sum data data2 data3
7a71146998ad521bab336a49f65c90c4  data
7a71146998ad521bab336a49f65c90c4  data2
7a71146998ad521bab336a49f65c90c4  data3

公钥加密、私钥解密就不写了,对着看就会很明白了。

int RSA_public_encrypt(int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding); int RSA_private_encrypt(int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding); int RSA_public_decrypt(int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding); int RSA_private_decrypt(int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding);

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-09-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
2 条评论
热度
最新
您好: 刚接触streamsets,想问下用API怎么创建用户,createDPMUsers接口不知道怎么用,求大神赐教
您好: 刚接触streamsets,想问下用API怎么创建用户,createDPMUsers接口不知道怎么用,求大神赐教
回复回复点赞举报
可以可以,社会社会
可以可以,社会社会
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
专访乔治亚理工宋乐教授:用强化学习为图论组合优化问题寻找“元算法”
大数据文摘作品,转载要求见文末 作者|钱天培 导读: 从交通优化、信息传播优化、用户网络分析,组合优化这一传统计算问题在日常应用中无处不在。然而,这类问题往往是NP难题(NP-hard),并需要大量的专业知识和试错来解决。在许多实际生活的应用中,相似的组合优化问题一次又一次的出现,而每次面对具有相同形式、但数据不同的问题,却需要大量人力一遍又一遍的设计新的算法方案。在机器学习席卷各个行业的同时,我们不禁想问:组合优化这一传统的应用数学问题是否也会有新的自动化的解决方法呢? 后台回复“图论”获取宋乐教授论文L
大数据文摘
2018/05/25
3K0
【强化学习】基础离线算法:Q-Learning算法
在强化学习中,Q-Learning 是一种基于值函数的强化学习算法。它通过学习一个状态-动作值函数(Q函数)来选择最优策略。Q-Learning 是一种 无模型(model-free) 的强化学习方法,意味着它不需要了解环境的动态(即转移概率和奖励函数),而只依赖于与环境的交互。
不去幼儿园
2024/12/18
1.4K0
【强化学习】基础离线算法:Q-Learning算法
【源头活水】Transfer in DRL Using SFs & GPI
“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。
马上科普尚尚
2021/03/17
3800
【源头活水】Transfer in DRL Using SFs & GPI
用于组合优化的强化学习:学习策略解决复杂的优化问题
从人类诞生之初,每一项技术创新,每一项改善我们生活的发明都是经过奇思妙想后设计出来的。从火到车轮,从电力到量子力学,我们对世界的理解和我们周围事物的复杂性,已经增长到难以直观地掌握它们的程度。
AiTechYun
2019/05/13
3K0
用于组合优化的强化学习:学习策略解决复杂的优化问题
【源头活水】PDE遇见深度学习
“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。
马上科普尚尚
2021/01/14
2K0
【源头活水】PDE遇见深度学习
【源头活水】深入理解:迁移强化学习之Successor Representation
“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。
马上科普尚尚
2021/03/17
1.1K0
【源头活水】深入理解:迁移强化学习之Successor Representation
【源头活水】驾驶行为预测方法:分层自适应可迁移网络HATN
“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。
马上科普尚尚
2021/11/16
4650
【源头活水】AlphaGo Zero技术梳理
“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。
马上科普尚尚
2021/03/17
8240
【源头活水】AlphaGo Zero技术梳理
【源头活水】MLP-Mixer 里隐藏的卷积
“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。
马上科普尚尚
2021/05/20
6880
【RL Latest Tech】分层强化学习:MAXQ分解算法
MAXQ分解是一种用于分层强化学习(Hierarchical Reinforcement Learning, HRL)的算法,由Thomas G. Dietterich提出。该算法通过将复杂的任务分解成更小的子任务来简化问题,并利用这些子任务来构建更复杂的策略。
不去幼儿园
2024/12/03
3100
【RL Latest Tech】分层强化学习:MAXQ分解算法
【源头活水】EMNLP 2023 | 基于大语言模型的复杂任务认知推理算法CogTree
“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。
马上科普尚尚
2023/12/15
4190
【源头活水】EMNLP 2023 | 基于大语言模型的复杂任务认知推理算法CogTree
论文趣读:人工智能里程碑?回顾2015年登上Nature的DQN(全文翻译+批注)
文章:Mnih V , Kavukcuoglu K , Silver D , et al. Playing Atari with Deep Reinforcement Learning[J]. Computer Science, 2013. DeepMind链接:(https://deepmind.com/research/publications/playing-atari-deep-reinforcement-learning)
Piper蛋窝
2020/11/19
1.8K0
论文趣读:人工智能里程碑?回顾2015年登上Nature的DQN(全文翻译+批注)
【源头活水】探究小样本学习中等变性与不变性表示的互补优势
“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。
马上科普尚尚
2021/03/17
6690
【源头活水】探究小样本学习中等变性与不变性表示的互补优势
【AlphaGo Zero 核心技术-深度强化学习教程笔记05】不基于模型的控制
【导读】Google DeepMind在Nature上发表最新论文,介绍了迄今最强最新的版本AlphaGo Zero,不使用人类先验知识,使用纯强化学习,将价值网络和策略网络整合为一个架构,3天训练后就以100比0击败了上一版本的AlphaGo。Alpha Zero的背后核心技术是深度强化学习,为此,专知有幸邀请到叶强博士根据DeepMind AlphaGo的研究人员David Silver《深度强化学习》视频公开课进行创作的中文学习笔记,在专知发布推荐给大家!(关注专知公众号,获取强化学习pdf资料,详情
WZEARW
2018/04/09
7900
【AlphaGo Zero 核心技术-深度强化学习教程笔记05】不基于模型的控制
强化学习之不基于模型的控制(五)
-贪婪策略)被提出,其基本思想就是使得某一状态下所有可能的行为都有几率被选中执行,具体通过设置一个比较小的
CristianoC
2021/01/04
8100
强化学习之不基于模型的控制(五)
强化学习之Q-Learning
我们做事情都会有自己的一个行为准则,比如小时候爸妈常说“不写完作业就不准看电视”。所以我们在写作业的状态(state)下,好的行为就是继续写作业,直到写完它,我们还可以得到奖励(reward),不好的行为就是没写完作业就跑去看电视了,被爸妈发现就会被惩罚,这种事情做的多了,也变成了我们不可磨灭的记忆,这其实就是一个Q-learning的决策过程。
CristianoC
2020/05/31
1.3K0
强化学习(七)时序差分离线控制算法Q-Learning
    在强化学习(六)时序差分在线控制算法SARSA中我们讨论了时序差分的在线控制算法SARSA,而另一类时序差分的离线控制算法还没有讨论,因此本文我们关注于时序差分离线控制算法,主要是经典的Q-Learning算法。
刘建平Pinard
2018/10/10
1.1K0
强化学习(七)时序差分离线控制算法Q-Learning
【源头活水】浅谈图上的自监督学习——对比学习
“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。
马上科普尚尚
2020/11/19
2.3K0
【源头活水】浅谈图上的自监督学习——对比学习
写给开发同学的 AI 强化学习入门指南
作者:bear 该篇文章是我学习过程的一些归纳总结,希望对大家有所帮助。 最近因为 AI 大火,搞的我也对 AI 突然也很感兴趣,于是开启了 AI 的学习之旅。其实我也没学过机器学习,对 AI 基本上一窍不通,但是好在身处在这个信息爆炸的时代,去网上随便一搜发现大把的学习资料。 像这个链接里面:https://github.com/ty4z2008/Qix/blob/master/dl.md 就有很多资料,但是这相当于大海捞针。在学习之前我们先明确自己的目的是什么,如题这篇文章是入门强化学习,那么就需要定义
腾讯技术工程官方号
2023/04/29
1.6K0
写给开发同学的 AI 强化学习入门指南
Scientific Reports|通过深度强化学习优化分子
今天给大家介绍Zhenpeng Zhou , Steven Kearnes等人在Nature/Scientific Reports上发表的文章“Optimization of Molecules via Deep Reinforcement Learning”。这篇文章主要是提出了一个Molecule Deep Q-Networks (MolDQN)框架,通过结合化学领域知识和先进的强化学习技术来进行分子优化。作者采用直接对分子修改的方式,来保证100%的化学有效性;而且在任何数据集上都不进行预训练,以避免可能的偏差;最后通过与其他几种最近发表的分子优化算法对比,得出基于MolDQN框架的分子优化可以获得更好的性能。
智能生信
2021/02/04
8640
推荐阅读
相关推荐
专访乔治亚理工宋乐教授:用强化学习为图论组合优化问题寻找“元算法”
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验