【C语言】案例二十八 综合案例——RSA算法

  • RSA算法是世界上最具有影响力的公钥加密算法,密钥越长就越难破解,能抵御绝大多数的密码攻击,非常可靠,该密码的安全性无法验证,而是基于一个非常简单地数论事实。将两个大素数相乘非常容易,但要对其结果进行因式分解则非常困难。一般认为1024位的RSA密钥基本安全,2018位的密钥完全安全。
  • RSA算法是非对称加密算法的代表。对称加密算法中使用同一个密钥进行加密或者解密而非对称加密算法需要一组密钥,公钥和私钥。公钥和私钥是一对,如果用公钥对数据进行加密,只有用对应私钥才能解密,如果用私钥进行加密,那么只有用对应公钥才能解密。因为加密和解密用的是不同的密钥,所以这种算法被称为非对称加密算法。
    要求设计简单地RSA算法,实现对整型数据的加密和解密。

案例分析
RSA算法中公钥,私钥的获取方式以及加密解密方式的公式如下所述:
(1)该算法需要两个公钥,这两个公钥分别是n和e,由两个素数p,q决定(p,q必须保密)。其中n是p,q的乘积,e为一个与(p-1)(q-1)互质的正整数;
(2)该算法需要两个私钥,分别为d和n,d = e^-1(mod(p -1)(q - 1))
(3)该算法的加密公式:c = m^e mod n,其中c为密文,该公式表示密文c恒等于m^e mod n
(4)该算法的解密公式:m = c^d mod n,其中m为明文,该公式表示明文m恒等于c^d mod n

案例设计
RSA算法主要分为两部分,一为公钥和私钥的生成,二为加密和解密的实现。若想实现加密和解密,首先要生成私钥和公钥。产生私钥和公钥的方法如下:

  1. 随机选择两个不相等的质数p,q,计算出p和q的乘积 n。
  2. 根据欧拉函数可求出φ(n) = (p -1)(q - 1);
  3. 随机选择一个整数e,条件是1 < e < φ(n),且φ(n)和e互质//无法相互整除
  4. 计算e对于φ(n)的模反元素d(可以使得e * d 被 φ(n)除的余数为1)
    模反元素也称为 模倒数 ,或者 模逆元 。 一整数a对 同余n之 模反元素 是指满足以下公式的整数 b: 如果不看mod运算,这类似于ab=1,那么a和b互为倒数。
  5. 将p,q记录销毁。
  6. 将n和e封装成公钥(n,e);n和d封装成私钥(n,d)
    根据获得的公钥和私钥执行加密或解密过程
    1)加密需要公钥,根据加密公式是对明文进行加密,获取加密后的密文c
    2)解密需要私钥,根据解密公式对密文进行解密,获取解密后的明文m
    由上述分析可知,如果不知道d,则无法通过信息c算出m。若想知道d就必须分解n,而这恰恰是极难做到的,所以RSA算法给通信安全提供了保障。

啊啊啊啊啊,好难 ,现在我们梳理一下
c是密文,m是明文。
p,q是两个不相等的质数。
n是pq乘积,为密钥之一
e是一个随机整数
φ(n)是欧拉函数(p -1)(q - 1)
d是e对于φ(n)的模反元素
将n和e封装成公钥(n,e)
n和d封装成私钥(n,d)

现在明白了吗!要开始写代码啦!!
代码如下:

#include <stdlib.h>
#include <stdio.h>


int RSA (int baseNum, int key ,int msg)  //
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值