南京邮电大学算法分析与设计实验报告——密码算法

合集下载

传统密码算法实验报告

传统密码算法实验报告

一、实验目的1. 理解并掌握传统密码算法的基本原理和实现方法。

2. 通过编程实践,加深对传统密码算法的理解。

3. 分析传统密码算法的优缺点,为后续学习现代密码算法打下基础。

二、实验内容本次实验主要涉及以下三种传统密码算法:1. 仿射密码2. 单表代替密码3. 维吉尼亚密码1. 仿射密码(1)原理简介:仿射密码是一种单字母替换密码,加密公式为:Ci = (ai pi + bi) mod 26,其中Ci为密文,pi为明文,ai和bi为密钥。

(2)算法流程:① 加密:根据密钥计算密文。

② 解密:根据密钥计算明文。

(3)代码实现(C语言):```c#include <stdio.h>// 加密函数void encrypt(char plaintext, char key, char ciphertext) {int a = key[0] - 'a';int b = key[1] - 'a';for (int i = 0; plaintext[i] != '\0'; i++) {if (plaintext[i] >= 'a' && plaintext[i] <= 'z') {ciphertext[i] = (a (plaintext[i] - 'a') + b) % 26 + 'a';} else {ciphertext[i] = plaintext[i];}}ciphertext[strlen(plaintext)] = '\0';}// 解密函数void decrypt(char ciphertext, char key, char plaintext) {int a = key[0] - 'a';int b = key[1] - 'a';for (int i = 0; ciphertext[i] != '\0'; i++) {if (ciphertext[i] >= 'a' && ciphertext[i] <= 'z') {plaintext[i] = (a (ciphertext[i] - 'a' - b + 26) % 26) + 'a';} else {plaintext[i] = ciphertext[i];}}plaintext[strlen(ciphertext)] = '\0';}int main() {char plaintext[100] = "hello world";char key[3] = "ab";char ciphertext[100], decryptedtext[100];encrypt(plaintext, key, ciphertext);decrypt(ciphertext, key, decryptedtext);printf("Plaintext: %s\n", plaintext);printf("Ciphertext: %s\n", ciphertext);printf("Decrypted text: %s\n", decryptedtext);return 0;}```2. 单表代替密码(1)原理简介:单表代替密码是一种将明文中的每个字符映射到密文的密码算法。

南京邮电大学算法分析与设计实验报告——密码算法

南京邮电大学算法分析与设计实验报告——密码算法

实验报告(2013/2014学年第一学期)课程名称算法分析与设计实验名称密码算法实验时间2014 年 5 月23 日指导单位计算机学院软件工程系指导教师张怡婷学生姓名班级学号B******** 学院(系) 软件工程专业软件工程实验报告三、实验原理及内容(包括操作过程、结果分析等)实验步骤1、RSA 算法是由麻省理工学院的Ron Rivest,Adi Shamir 和Len Adleman 于1977 年研制并于1978 年首次发表的一种算法,是第一个能同时用于加密和数字签名的算法,且易于理解和操作,因此作为一种通用公开密钥加密方式而受到推崇。

RSA 是一种分组密码,其中明文和密文都是小于某个n 的从0 到n-1 的整数,则分组的二进制值长度必须小于或等于log2n。

若以M 表示明文分组,而C 表示密文分组,则加密和解密的过程如下:C=Me mod nM=Cd mod n=(Me)d mod n=Med mod n发送方和接受方都必须知道n 的值。

发送方知道 e 的值,而只有接受方知道d 的值。

因此这是一种公开密钥为{e,n},且私有密钥为{d,n}的公开密钥加密算法。

此时算法要能够满足公开密钥加密的要求,则必须满足以下条件:(1)有可能找到e、d、n 的值,使得对所有M<n 有Med=M mod n。

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

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

2、重点考虑第一个条件:由Euler 定理的一个推论:给定两个素数p和q以及两个整数n 和m,使得n=pq 而且0<m<n,并且对于任意整数k,下列关系成立:mkΦ(n)+1=mk(p-1)(q-1)+1≡m mod n其中Φ(n)是欧拉函数,也就是不超过n 且与n 互素的整数个数。

对于素数p 和q,有Φ(pq)=(p-1)(q-1)。

因此得到需要的关系:ed=kΦ(n)+1,等价于: ed≡1 mod Φ(n)d≡e-1 mod Φ(n)也就是说:d 和 e 是以Φ(n)为模的乘法逆元。

现代密码算法实验报告(3篇)

现代密码算法实验报告(3篇)

第1篇一、实验目的1. 了解现代密码学的基本原理和数论基础知识;2. 掌握非对称密码体制的著名代表RSA加密算法的工作原理和流程;3. 设计实现一个简单的密钥系统;4. 掌握常用加密算法AES和DES的原理及实现。

二、实验内容1. RSA加密算法实验2. AES加密算法实验3. DES加密算法实验三、实验原理1. RSA加密算法RSA算法是一种非对称加密算法,由罗纳德·李维斯特、阿迪·沙米尔和伦纳德·阿德曼三位密码学家于1977年提出。

其基本原理是选择两个大质数p和q,计算它们的乘积n=pq,并计算欧拉函数φ(n)=(p-1)(q-1)。

选择一个整数e,满足1<e<φ(n)且e与φ(n)互质。

计算e关于φ(n)的模逆元d。

公开密钥为(e,n),私有密钥为(d,n)。

加密过程为C=Me mod n,解密过程为M=Cd mod n。

2. AES加密算法AES(Advanced Encryption Standard)是一种分组加密算法,采用128位分组大小和128、192或256位密钥长度。

AES算法主要分为四个阶段:初始轮、密钥扩展、中间轮和最终轮。

每个轮包括字节替换、行移位、列混淆和轮密钥加。

3. DES加密算法DES(Data Encryption Standard)是一种分组加密算法,采用64位分组大小和56位密钥长度。

DES算法主要分为16轮,每轮包括置换、置换-置换、S盒替换和密钥加。

四、实验步骤及内容1. RSA加密算法实验(1)选择两个大质数p和q,计算n=pq和φ(n)=(p-1)(q-1);(2)选择一个整数e,满足1<e<φ(n)且e与φ(n)互质,计算e关于φ(n)的模逆元d;(3)生成公开密钥(e,n)和私有密钥(d,n);(4)用公钥对明文进行加密,用私钥对密文进行解密。

2. AES加密算法实验(1)选择一个128、192或256位密钥;(2)初始化初始轮密钥;(3)进行16轮加密操作,包括字节替换、行移位、列混淆和轮密钥加;(4)输出加密后的密文。

密码设计实验报告

密码设计实验报告

一、实验目的1. 理解密码设计的基本原理和常用算法。

2. 掌握密码设计的步骤和方法。

3. 培养实际应用密码技术解决实际问题的能力。

二、实验内容1. 密码设计的基本原理2. 常用密码算法(1)对称加密算法(2)非对称加密算法(3)哈希算法3. 密码设计的步骤和方法4. 实际应用案例分析三、实验原理1. 密码设计的基本原理密码设计的主要目的是保证通信过程中的信息安全,防止信息被非法获取、篡改和伪造。

密码设计的基本原理包括:(1)混淆:使密文难以理解,即使获得了密文,也无法得知明文;(2)扩散:使密文中的任何一个小变化都能引起明文对应位置的大变化;(3)不可逆性:加密过程是可逆的,但解密过程是不可逆的。

2. 常用密码算法(1)对称加密算法:加密和解密使用相同的密钥,如DES、AES等;(2)非对称加密算法:加密和解密使用不同的密钥,如RSA、ECC等;(3)哈希算法:将任意长度的数据映射成固定长度的数据,如MD5、SHA-1等。

3. 密码设计的步骤和方法(1)需求分析:明确密码设计的应用场景和安全性要求;(2)选择加密算法:根据需求分析,选择合适的加密算法;(3)密钥管理:设计密钥生成、分发、存储和销毁机制;(4)加密算法实现:根据所选加密算法,编写加密和解密程序;(5)安全性评估:对设计的密码系统进行安全性评估,确保其满足安全要求。

四、实验步骤1. 需求分析:假设本实验应用于电子邮件加密传输,安全性要求高;2. 选择加密算法:选择AES算法作为加密算法,其安全性较高;3. 密钥管理:生成一个256位的AES密钥,并妥善保管;4. 加密算法实现:使用C语言实现AES加密和解密程序;5. 安全性评估:通过测试数据,验证加密和解密程序的正确性。

五、实验结果与分析1. 加密程序实现(1)加密程序:将明文输入加密程序,输出密文;(2)解密程序:将密文输入解密程序,输出明文。

2. 安全性评估通过测试数据,验证加密和解密程序的正确性,结果如下:(1)加密程序:输入明文“Hello World”,输出密文“bN9R0J0X2JZj0ZzQ=”;(2)解密程序:输入密文“bN9R0J0X2JZj0ZzQ=”,输出明文“Hello World”。

南京邮电大学算法设计实验报告——动态规划法

南京邮电大学算法设计实验报告——动态规划法
for(int j=1;j<=n;j++) {
if(a[i]==b[j]) {
c[i][j]=c[i-1][j-1]+1; s[i][j]=1; } else if(c[i-1][j]>=c[i][j-1]) { c[i][j]=c[i-1][j]; s[i][j]=2; } else { c[i][j]=c[i][j-1]; s[i][j]=3; } } } return c[m][n]; //返回最优解值 }
算法分析与设计 A
动态规划法
2009
年 11 月 20 日
计算机学院软件工程系
张怡婷
学生姓名 学院(系)
丁力琪 班级学号 计算机学院 专 业
B07030907 软件工程
实验报告
实验名称
动态规划法
指导教师 张怡婷
实验类型
验证
实验学时 2×2 实验时间 2009-11-20
一、 实验目的和任务
目的:加深对动态规划法的算法原理及实现过程的理解,学习用动态
6
8、输入序列 X={x1,x2,……,xm}={a,b,c,b,d,a,b}和 Y={y1,y2,……,yn}={b,d,c,a,b,a}作为测 试数据,测试程序是否能够正确运行?输出结果是什么? 运行正确,实验结果显示:4
bcba
9、分析该动态规划算法的两个主要成员函数 int LCSLength()和 void CLCS()的时间复杂 性。
#include<iostream> #include<string> using namespace std; #define maxlength 11 class LCS { public:

算法分析与设计实验报告

算法分析与设计实验报告

算法分析与设计实验报告算法分析与设计实验报告一、引言算法是计算机科学的核心,它们是解决问题的有效工具。

算法分析与设计是计算机科学中的重要课题,通过对算法的分析与设计,我们可以优化计算机程序的效率,提高计算机系统的性能。

本实验报告旨在介绍算法分析与设计的基本概念和方法,并通过实验验证这些方法的有效性。

二、算法分析算法分析是评估算法性能的过程。

在实际应用中,我们常常需要比较不同算法的效率和资源消耗,以选择最适合的算法。

常用的算法分析方法包括时间复杂度和空间复杂度。

1. 时间复杂度时间复杂度衡量了算法执行所需的时间。

通常用大O表示法表示时间复杂度,表示算法的最坏情况下的运行时间。

常见的时间复杂度有O(1)、O(log n)、O(n)、O(n log n)和O(n^2)等。

其中,O(1)表示常数时间复杂度,O(log n)表示对数时间复杂度,O(n)表示线性时间复杂度,O(n log n)表示线性对数时间复杂度,O(n^2)表示平方时间复杂度。

2. 空间复杂度空间复杂度衡量了算法执行所需的存储空间。

通常用大O表示法表示空间复杂度,表示算法所需的额外存储空间。

常见的空间复杂度有O(1)、O(n)和O(n^2)等。

其中,O(1)表示常数空间复杂度,O(n)表示线性空间复杂度,O(n^2)表示平方空间复杂度。

三、算法设计算法设计是构思和实现算法的过程。

好的算法设计能够提高算法的效率和可靠性。

常用的算法设计方法包括贪心算法、动态规划、分治法和回溯法等。

1. 贪心算法贪心算法是一种简单而高效的算法设计方法。

它通过每一步选择局部最优解,最终得到全局最优解。

贪心算法的时间复杂度通常较低,但不能保证得到最优解。

2. 动态规划动态规划是一种将问题分解为子问题并以自底向上的方式求解的算法设计方法。

它通过保存子问题的解,避免重复计算,提高算法的效率。

动态规划适用于具有重叠子问题和最优子结构的问题。

3. 分治法分治法是一种将问题分解为更小规模的子问题并以递归的方式求解的算法设计方法。

加密算法实验报告

#### 实验名称:加密算法设计与实现#### 实验时间:2023年10月15日#### 实验地点:XX大学计算机科学与技术学院实验室#### 实验者:[姓名] [学号]#### 一、实验目的1. 理解并掌握常见的加密算法原理,包括对称加密算法和非对称加密算法。

2. 能够运用所学知识设计并实现简单的加密算法。

3. 通过实验加深对加密算法安全性的认识。

#### 二、实验内容本次实验主要包括以下内容:1. 对称加密算法:DES算法实现。

2. 非对称加密算法:RSA算法实现。

3. 加密算法的安全性分析。

#### 三、实验原理1. 对称加密算法(DES):DES算法是一种基于密钥的加密算法,其密钥长度为56位。

它将64位的明文输入经过16轮迭代,最终生成64位的密文输出。

DES算法的核心是它的密钥生成和迭代加密过程。

2. 非对称加密算法(RSA):RSA算法是一种基于公钥和私钥的非对称加密算法。

它利用了数论中的大数分解难题。

RSA算法包括密钥生成、加密和解密三个过程。

其中,公钥用于加密,私钥用于解密。

#### 四、实验步骤1. DES算法实现:- 实现DES算法的初始化密钥生成。

- 实现DES算法的16轮迭代加密过程。

- 对明文进行加密,生成密文。

2. RSA算法实现:- 实现RSA算法的密钥生成过程。

- 实现RSA算法的加密和解密过程。

- 对明文进行加密,生成密文;对密文进行解密,恢复明文。

3. 加密算法的安全性分析:- 分析DES算法和RSA算法的安全性。

- 比较两种算法的优缺点。

#### 五、实验结果与分析1. DES算法:- 加密速度较快,适合加密大量数据。

- 密钥长度较短,安全性相对较低。

2. RSA算法:- 加密速度较慢,适合加密少量数据。

- 密钥长度较长,安全性较高。

#### 六、实验总结通过本次实验,我们掌握了DES和RSA两种加密算法的原理和实现方法。

在实验过程中,我们深刻认识到加密算法在信息安全中的重要性。

算法设计与分析实验报告

算法设计与分析实验报告算法设计与分析实验报告引言:算法设计与分析是计算机科学中的重要课程,它旨在培养学生解决实际问题的能力。

本次实验旨在通过设计和分析不同类型的算法,加深对算法的理解,并探索其在实际应用中的效果。

一、实验背景算法是解决问题的步骤和方法的描述,是计算机程序的核心。

在本次实验中,我们将重点研究几种经典的算法,包括贪心算法、动态规划算法和分治算法。

通过对这些算法的设计和分析,我们可以更好地理解它们的原理和应用场景。

二、贪心算法贪心算法是一种基于局部最优选择的算法,它每一步都选择当前状态下的最优解,最终得到全局最优解。

在实验中,我们以背包问题为例,通过贪心算法求解背包能够装下的最大价值物品。

我们首先将物品按照单位重量的价值从大到小排序,然后依次将能够装入背包的物品放入,直到背包无法再装下物品为止。

三、动态规划算法动态规划算法是一种通过将问题分解为子问题,并记录子问题的解来求解整体问题的算法。

在实验中,我们以斐波那契数列为例,通过动态规划算法计算斐波那契数列的第n项。

我们定义一个数组来保存已经计算过的斐波那契数列的值,然后通过递推公式将前两项的值相加得到后一项的值,最终得到第n项的值。

四、分治算法分治算法是一种将问题分解为更小的子问题,并通过递归求解子问题的算法。

在实验中,我们以归并排序为例,通过分治算法对一个无序数组进行排序。

我们首先将数组分成两个子数组,然后对子数组进行递归排序,最后将两个有序的子数组合并成一个有序的数组。

五、实验结果与分析通过对以上三种算法的设计和分析,我们得到了以下实验结果。

在贪心算法中,我们发现该算法能够在有限的时间内得到一个近似最优解,但并不能保证一定得到全局最优解。

在动态规划算法中,我们发现该算法能够通过记忆化搜索的方式得到准确的结果,但在问题规模较大时,其时间复杂度较高。

在分治算法中,我们发现该算法能够将问题分解为更小的子问题,并通过递归求解子问题,最终得到整体问题的解。

密码学算法设计与实现的实验报告

密码学算法设计与实现的实验报告实验报告一、实验目的本实验的目的是设计和实现一个密码学算法,加深对密码学基本知识的理解,并掌握密码学算法设计与实现的方法。

二、实验原理本实验选取的密码学算法是AES(Advanced Encryption Standard)算法,该算法是一种对称加密算法,具有高度的安全性和广泛的应用。

AES算法基于替代、置换和混合技术,用于对数据进行加密和解密。

实现AES算法的关键是实现四个基本操作:字节替代(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和轮密钥加(AddRoundKey)。

其中字节替代和行移位不涉及密钥,可以使用固定的S-box和位移表进行计算;列混淆和轮密钥加需要根据密钥来计算。

三、实验步骤1. 设计并实现AES算法的主函数,控制加密和解密操作;2. 实现字节替代和行移位操作的代码,并通过测试验证正确性;3. 实现列混淆和轮密钥加操作的代码,并通过测试验证正确性;4. 设计并实现密钥扩展函数,用于生成轮密钥;5. 实现AES算法的加密函数和解密函数,通过测试验证正确性;6. 验证AES算法对数据进行加密和解密的正确性和安全性。

四、实验结果经过实验,AES算法实现的加密和解密功能正常,能够对数据进行可靠的保护。

验证加密函数和解密函数的正确性时,采用了多组不同的密钥和明文进行测试,结果都能够正确地实现加密和解密的逆操作。

五、实验心得体会通过本实验,我深入理解了AES算法的工作原理和实现方法,学会了使用替代、置换和混合技术对数据进行加密和解密。

在实验中,我不仅学习了密码学的基本知识,还锻炼了编程和算法设计的能力。

在实现算法的过程中,我特别注重代码的可读性和可维护性,采用了模块化和函数化的设计方法,使得代码逻辑清晰,易于理解和修改。

总之,本实验对于深入学习密码学和加密算法具有重要意义,通过动手实践,我不仅理解了密码学的基本原理,还培养了自主学习和解决问题的能力。

南邮程序设计实践报告(2篇)

第1篇一、前言随着信息技术的飞速发展,程序设计已成为当代大学生必备的基本技能之一。

为了提高我们的编程能力,增强实践操作经验,南邮开展了程序设计实践教学活动。

本文将详细记录我在南邮程序设计实践过程中的学习体会、实践成果以及遇到的问题和解决方法。

二、实践内容本次实践课程主要围绕以下几个方面展开:1. 基础编程语言学习:以C语言为基础,学习了基本的数据类型、运算符、控制结构、函数等编程知识。

2. 算法设计与分析:学习了常用的算法设计方法,如排序、查找、递归等,并分析了算法的时间复杂度和空间复杂度。

3. 数据结构学习:学习了数组、链表、栈、队列、树、图等基本数据结构,并了解了它们在实际问题中的应用。

4. 软件开发实践:通过参与小型项目开发,掌握了软件开发的基本流程,包括需求分析、设计、编码、测试和部署等。

5. 软件工程知识:学习了软件工程的原理和方法,如软件需求规格说明书、软件设计说明书等。

三、实践过程1. 基础编程语言学习:在实践过程中,我通过阅读教材、观看教学视频、参与课堂讨论等方式,逐步掌握了C语言的基本语法和编程思想。

同时,我也通过编写简单的程序,如计算器、学生管理系统等,巩固了所学知识。

2. 算法设计与分析:在学习过程中,我重点学习了排序算法(冒泡排序、选择排序、插入排序、快速排序等)和查找算法(顺序查找、二分查找等)。

通过对比分析各种算法的优缺点,我学会了根据实际问题选择合适的算法。

3. 数据结构学习:在学习数据结构的过程中,我通过动手实现各种数据结构,如链表、栈、队列、树等,加深了对数据结构的理解。

同时,我也通过解决实际问题,如快速排序的实现、二叉搜索树的遍历等,提高了自己的编程能力。

4. 软件开发实践:在软件开发实践中,我参与了“学生信息管理系统”的开发。

在项目开发过程中,我负责编写部分功能模块的代码,并参与了测试和部署工作。

通过这次实践,我了解了软件开发的基本流程,提高了自己的团队协作能力。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告
(2013/2014学年第一学期)
课程名称算法分析与设计
实验名称密码算法
实验时间2014 年 5 月23 日指导单位计算机学院软件工程系
指导教师张怡婷
学生姓名班级学号B******** 学院(系) 软件工程专业软件工程
实验报告
三、实验原理及内容(包括操作过程、结果分析等)
实验步骤
1、RSA 算法是由麻省理工学院的Ron Rivest,Adi Shamir 和Len Adleman 于1977 年
研制并于1978 年首次发表的一种算法,是第一个能同时用于加密和数字签名的算法,且易
于理解和操作,因此作为一种通用公开密钥加密方式而受到推崇。

RSA 是一种分组密码,其中明文和密文都是小于某个n 的从0 到n-1 的整数,则分组的
二进制值长度必须小于或等于log2n。

若以M 表示明文分组,而C 表示密文分组,则加密和
解密的过程如下:
C=Me mod n
M=Cd mod n=(Me
)
d mod n=Med mod n
发送方和接受方都必须知道n 的值。

发送方知道 e 的值,而只有接受方知道d 的值。

因此这是一种公开密钥为{e,n},且私有密钥为{d,n}的公开密钥加密算法。

此时算法要能够满足公开密钥加密的要求,则必须满足以下条件:
(1)有可能找到e、d、n 的值,使得对所有M<n 有M
ed=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≡1 mod Φ(n)
d≡e
-1 mod Φ(n)
也就是说:d 和 e 是以Φ(n)为模的乘法逆元。

根据模运算规则,它的必要条件是:d、e 和Φ(n)是互素的,即gcd(Φ(n),d)=1。

3、因此给出RSA 方案:
p,q 两个素数(私有,选择)
n=pq (公开,计算出)
e,其中gcd(Φ(n),e)=1;1<e<Φ(n) (公开,选择)
d≡e
-1 mod Φ(n) (私有,计算出)
私有密钥由{d,n}组成,公开密钥由{e,n}组成。

假设用户A 公布了它的公开密钥,而用户B 希望向 A 发送一个报文M,那么 B 计算出C= M
e mod n 并传输C。

在收到这个密文时,用户A 通过计算M=Cd mod n 进行解密。

4、编程一个简单的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=Cd mod n。

程序代码:
#include <iostream>
using namespace std;
void modular_linear_equation_solver(int a, int b, int n)
{
int d,x,y,e,i,t;
d=extended_euclid(a,n,x,y);
if (b%d>0)
{
cout << "No answer!" << endl;
}else
{
e=x*(b/d)%n;
if (e<0) e+=n;
for (i=0;i<d;i++)
{
t=(e+i*(n/d))%n;
cout << "密钥D是:" << t <<endl;
}
}
}
int ext_euclid(int a,int b,int f,int e)
{
int m,n,t;
if (e==1) return b;
m=f/e; n=f%e;
t=a-b*m;
ext_euclid(b,t,e,n);
}
void main()
{
//输入质数p和q
int p,q;
cout<<"输入一个质数p(如101):";
cin>>p;
cout<<"输入一个质数q(如113):";
cin>>q;//求得n=p*q的值
int n=p*q;
cout<<"分组加密时,每个分组的大小不能超过n=p*q=";
cout<<n<<endl;
//求得φ(n)=(p-1)*(q-1)的值
int f=(p-1)*(q-1);
cout<<"模φ(n)=(p-1)*(q-1)=";
cout<<f<<endl<<endl;
//选取与φ(n)互质的公钥e
int e;
cout<<"输入与φ(n)互质的公钥e(如3533):";
cin>>e;
//由e和φ(n)生成私钥d
int d=ext_euclid(0,1,f,e);
while (d<=0) d+=f;
cout<<"通过调用扩展欧几里德算法,求得密钥d为:"<<d<<endl;
//利用生成的公钥{e,n}对明文M进行加密
int M,C;
cout<<"现在公钥{e,n}、私钥{d,n}均已生成完毕。

\n\n请输入需要传输的明文内容进行加密(如9726):";
cin>>M;
C=1;
for(int 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;
}。

相关文档
最新文档