基于boost库中cpp_int库实现RSA

- 前言:

  在应用层有两个协议分别叫做 HTTP 和 HTTPS,这两个协议想必大家都不陌生,HTTPS 与 HTTP 最大的区别就是 HTTP 发送的数据在网络中发送的信息是以明文的形式发送的,并且是可以被人截获,别人截获到信息后很容易就得到了信息内容。为了让别人不容易拿到消息或者说让别人基本不可能拿到消息,就有了HTTPS,HTTPS 对数据进行了一层加密,让别人即使拿到消息也没办法解密(或者解密的难度变大)。
可以参考:解析HTTPS

- 简介

  通过上面那篇博客我们可以得知,在 HTTPS 中比较重要的或者说加密的关键就是非对称加密。在下面实现的就是非对称加密中的一种算法------RSA算法。

- 原理

  RSA中想要进行加密和解密的过程,最重要的就是求出 公钥私钥,然后通过下面的公式进行加密和解密:

  • 加密公式:公钥(E, N)
    密 文 = ( 明 文 E ) % N 密文=(明文^E)\%N =(E)%N
  • 解密公式:私钥(D, N)
    明 文 = ( 密 文 D ) % N 明文=(密文^D)\%N =(D)%N
    加密解密流程:
    在这里插入图片描述

  清楚了整个流程之后,接下来整个流程中最难的部分也是最重要的部分就是如何求得公钥和私钥!
  公钥和私钥不只是两个数字,公钥和私钥分别是一对数字组成的,也就是我们刚才写的公式中的公钥是(E, N),私钥是(D, N),换言之就是我们如何取求得 E、D、N ?
密钥产生流程:
在这里插入图片描述

举个例子:

1、选取素数p1 = 5, p2 = 11;
2、计算两个素数的乘积得到n = p1 * p2 = 55;
3、计算欧拉 φ(n) = (p1 - 1)(p2 - 1) = 4 * 10 = 40;
4、选一个与 φ(n) 互质的数 e = 3;
5、由(d * 3) % 40 = 1;计算得出模反元素 d = 27;
6、得到公钥(3, 55) 私钥(27, 55)
7、加密:对数字 " 3 " 进行加密:由加密公式得:密文 = (3^3)%40 = 27
8、解密:对密文" 27 "进行解密: 由解密公式得:明文 = (27^27)%40 = 3

数学知识


欧拉函数:
φ ( x ) = x ∏ i = 1 n ( 1 − 1 p i ) φ(x)=x\prod_{i=1}^{n}(1-\frac{1}{p_{i}}) φ(x)=x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值