南邮算法分析与设计实验4 密码算法

实验目的

了解现代密码学的基本原理和数论的基础知识,掌握非对称密码体制的著名代表RSA加密算法的工作原理和流程,并设计实现一个简单的密钥系统。

实验内容

了解加/解密的基本原理和工作过程,用公开密钥对明文进行加密,并用私人密钥对密文进行解密,构造一个简单的 RSA 公开密钥系统。

实验原理

1、RSA算法是由麻省理工学院的 Ron Rivest,Adi Shamir 和Len Adleman 于 1977 年研制并于1978 年首次发表的一种算法,是第一个能同时用于加密和数字签名的算法,且易于理解和操作,因此作为一种通用公开密钥加密方式而受到推崇。RSA是一种分组密码,其中明文和密文都是小于某个 n 的从0 到 n-1 的整数,则分组的

二进制值长度必须小于或等于log2n。若以 M 表示明文分组,而C 表示密文分组,则加密和解密的过程如下:

加密:C=M^e mod n

解密:M’=C^d mod n

发送方和接受方都必须知道n 的值。发送方知道 e 的值,而只有接受方知道d 的值。因此这是一种公开密钥为{e,n},且私有密钥为{d,n}的公开密钥加密算法。此时算法要能够满足公开密钥加密的要求,则必须满足以下条件:

(1)        有可能找到 e、d、n的值,使得对所有 M<n 有

M^(ed) modn = M mod n。

(2)对于所有M<n 的值,要计算 M^e和C^d 相对来说是简单的。

(3)在给定e 和 n 时,判断出d 是不可行的。

2、重点考虑第一个条件:

由 Euler 定理的一个推论:给定两个素数p和 q以及两个整数 n 和m,使得 n=pq 而且0<m<n,并且对于任意整数k,下列关系成立:

m^(kΦ(n)+1)=m

k(p-1)(q-1)+1≡m mod n

其中Φ(n)是欧拉函数,也就是不超过n 且与 n 互素的整数个数。对于素数p 和 q,有Φ(pq)=(p-1)(q-1)。

因此得到需要的关系:ed=kΦ(n)+1,

等价于: ed≡1mod Φ(n) => d≡e-1mod Φ(n)

也就是说:d 和e 是以Φ(n)为模的乘法逆元。

根据模运算规则,它的必要条件是:d、e和Φ(n)是互素的,即gcd(Φ(n),d)=1。3、因此给出RSA 方案:

1. 选择两个大素数p,q(私有,选择)

2. 计算乘积n = p q,得到Φ(n)=(p-1)(q-1)(公开,计算出)

3. 选择随机整数e,其中gcd(Φ(n),e)=1;0<e<Φ(n)(公开,选择)

4. 计算d≡e-1mod Φ(n) (私有,计算出)

5. 私有密钥由{d,n}组成,公开密钥由{e,n}组成。

假设用户 A 公布了它的公开密钥,而用户B 希望向 A 发送一个报文M,那么 B 计算出C=M^e mod n 并传输 C。在收到这个密文时,用户A 通过计算 M’=C^d mod n 进行解密。

3、编程一个简单的RSA 加、解密系统。

(1)假设用户A 选择两个素数 p 和q,计算得到 n=pq 和Φ(n)=(p-1)(q-1)。选择一个加密密钥e,它小于Φ(n)且与Φ(n)互素。计算解密密钥d≡ e-1 mod Φ(n)。则用户A 公布公开密钥{e,n},自己拥有私有密钥{d,n}。

(2)用户B 使用用户 A 的公开密钥e 和 n 对报文M 进行加密,得到 C= M^e mod n,并发送给用户A。

(3)用户A 收到加密的报文后,使用自己的私有密钥 d 和n 对加密报文 C 进行解密,恢复得到明文M=C^d mod n。

实验代码:

#include <iostream>
using namespace std;
int MOD;
int extended_euclid(int a, int b, int &x, int &y)
{ if(b == 0){x = 1;y = 0;return a;}int gcd = extended_euclid(b, a % b, x, y);int t = x % MOD;x = y % MOD;y = ((t - a / b * x) % MOD + MOD) % MOD;return gcd;
}int main()
{int p, q, i, d;cout << "输入一个质数p:";cin >> p;cout << "输入一个质数q:";cin >> q;int n = p * q;cout<<"分组加密时,每个分组的大小不能超过p*q=";cout << n << endl;//求得φ(n)=(p-1)*(q-1)的值MOD = (p - 1) * (q - 1);cout << "模φ(n)=(p-1)*(q-1)=";cout << MOD << endl << endl;//选取与φ(n)互质的公钥eint e;cout << "输入与φ(n)互质的公钥e:";cin >> e;//由e和φ(n)生成私钥dint x, y;extended_euclid(e, MOD, d, y);while(d < 0) d += MOD;cout << "通过调用扩展欧几里德算法,求得密钥d为:" << d << endl;//利用生成的公钥{e,n}对明文M进行加密int M, C;cout << "现在公钥{e,n}、私钥{d,n}均已生成完毕。\n\n请输入需要传输的明文内容进行加密(如9726):";cin >> M;C = 1;for(i = 1; i <= e; i++)C = C * M % n;cout << "明文M=" << M << "经加密后得到密文C=M^e(mod n):" << C << endl;//利用生成的私钥私钥{e,n}对密文C进行解密M = 1;for(i = 1; i <= d; i++)M = M * C % n;cout << "密文C=" << C << "经解密后得到明文M=C^d(mod n):" << M << endl;return 0;
}

南邮算法分析与设计实验4 密码算法相关推荐

  1. Python算法分析与设计实验:动态规划算法

    Python算法分析与设计实验:动态规划算法 一.实验目的 1.理解动态规划求解优化问题的典型步骤,以及动态规划算法求解计算问题的时间复杂度分析 2.熟练掌握利用动态规划算法求解一维.二维等典型优化问 ...

  2. 算法分析与设计-实验三 贪心算法设计

    文章目录 1.最优服务次序问题 2.区间相交问题 3.汽车加油问题 4.活动安排问题:考虑将一系列活动安排在科学会堂.假设有n个活动,每个活动需要花费一个单位时间.如果在时间T[i]或T[i]之前开始 ...

  3. 算法分析与设计-实验二 动态规划算法设计

    文章目录 1. 数字三角问题 2.最长公共子序列问题 3.日常购物 4.台阶问题 一.实验目的: 掌握动态规划算法的基本思想及适用条件,掌握动态规划算法的设计步骤和具体实现. 二.实验所用仪器及环境 ...

  4. 算法分析与设计-实验四 回溯算法设计

    文章目录 1.0-1背包问题 2.旅行售货员问题 3.图的m着色问题 一.实验目的: 掌握用回溯法解题的算法框架:根据回溯法解决实际问题. 二.实验所用仪器及环境 Windows 7 以上操作系统,P ...

  5. 算法分析与设计实验报告 ——二分搜索程序算法的实现

    算法分析与设计实验报告 --二分搜索程序算法的实现 实验目的及要求 1.理解分治算法的概念和基本要素: 2.理解递归的概念: 3.掌握设计有效算法的分治策略: 4.通过二分搜索技术学习分治策略设计技巧 ...

  6. 算法分析与设计实验报告——实现汽车加油问题

    算法分析与设计实验报告--实现汽车加油问题 目录: 算法分析与设计实验报告--实现汽车加油问题 一. 实验目的 二.实验要求 三. 实验原理 四. 实验过程(步骤) 五. 运行结果 六.实验分析与讨论 ...

  7. 算法分析与设计实验报告——二分搜索算法的实现

    算法分析与设计实验报告--二分搜索算法的实现 目录: 算法分析与设计实验报告--二分搜索算法的实现 一. 实验目的 二.实验要求 三. 实验原理 四. 实验过程(步骤) 五. 运行结果 六.实验分析与 ...

  8. 中北大学算法分析与设计实验报告一(BF算法)

    中北大学算法分析与设计实验报告一(BF算法) 1.实验名称 实验一 算法基础实验:数理基础与串匹配程序设计 2.实验目的 以字符串匹配问题为例,结合C等编程语言和链表.堆.栈等数据结构知识,基于BF算 ...

  9. 算法分析与设计实验一

    算法分析与设计实验一 实验一一共三题,附上题目及完整代码. 6104 题目內容: 求n个元素中的最大元素值,要求用递归与分治策略解决. 输入 第1行:元素个数n 第2行:n个元素的值 输出: n个元素 ...

  10. 算法分析与设计实验报告

    计算机算法分析与设计实验报告 实验一:递归回溯 阶乘(Factorial) #include<iostream> using namespace std; int factorial(in ...

最新文章

  1. VUE—从入门到飞起(四)
  2. 吴恩达机器学习资源汇总帖
  3. 大讲堂 | 预测时间敏感的机器学习模型建模与优化
  4. python random randint_python中random.randint和random.randrange的区别详解
  5. Fast RCNN总结
  6. 笔记05 局部类型
  7. 李宏毅《机器学习》完整版笔记发布
  8. android开发realm多线程操作,数据库的设计:深入理解 Realm 的多线程处理机制
  9. jQuery验证框架(五)验证器
  10. 收集表的使用与批量图片下载
  11. sql_全国省市区、邮编、经纬度、城市拼音、电话区号
  12. 微信小程序图片显示以及动态数据修改(五六)
  13. 线性时变模型预测控制推导
  14. eds能谱图分析实例_电子产品质量的提升,离不开这些失效分析!
  15. fatal: 无法创建 '/xxx/xxx/xxx/xxx/.git/index.lock':文件已存在。似乎另外一个 git 进程在这个仓库中运行,例如:'git commit' 命令打开了一个编辑
  16. 2021-06-11
  17. 山东省农商行计算机真题,2018山东农商行招聘考试题库:计算机试题三
  18. 普通路由器改4g路由器_4G工业路由器将加速工业物联网发展进程
  19. 使用Apifox解决测试文件下载出错问题
  20. 由键盘输出三个整数分别存入变量num1,num2,num3,进行排序从小到大输出

热门文章

  1. 菲涅耳衍射matlab,matlab – 两步菲涅耳衍射
  2. ROS安装超详细保姆级教程
  3. 『NLP学习笔记』AllenNLP的注册机制
  4. Android逆向:某鹰直播Lua脚本解密
  5. 代码审计:企业级web代码安全架构读书笔记(二)
  6. neo4j各个版本下载
  7. 计算机应用基础好不好考,计算机应用基础好考么
  8. python-最速下降法
  9. 变步长梯形求积公式C语言_光伏逆变器MPPT算法步长设定李星硕
  10. iOS游戏开发梦想成真:神奇的GameSalad