密码学课程设计(格式)2016
密码学课程设计

密码学课程设计报告目录实验一凯撒加密算法 (1)1.1算法简介 (1)1.2算法原理 (1)1.3加解密算法 (1)1.4运行截图 (2)实验二MD5算法2.1算法简介 (3)2.2 算法分析 (3)2.3 算法步骤 (4)2.4运行截图 (5)实验三分组密码AES加密解密 (6)3.1 算法概述 (6)3.2 算法设计思路 (6)3.3运行结果 (8)实验四椭圆曲线加密算法 (9)4.1 算法简介 (9)4.2算法设计 (9)4.3 运行结果 (9)实验总结 (10)实验一凯撒加密算法1.1算法简介著名的凯撒加密算法就是一种简单的替代加密法,它是将明文中每一个字符用右移3位并以26个字符为模的替代(A由D替代,B由E替代,··…—,W由Z 替代,X由A替代,Y由B替代,Z由C替代)。
1.2基本原理在密码学中存在着各种各样的置换方式,但所有不同的置换方式都包含2个相同的元素。
密钥和协议(算法)。
凯撒密码的密钥是3,算法是将普通字母表中的字母用密钥对应的字母替换。
置换加密的优点就在于它易于实施却难于破解. 发送方和接收方很容易事先商量好一个密钥,然后通过密钥从明文中生成密文,即是敌人若获取密文,通过密文直接猜测其代表的意义,在实践中是不可能的。
凯撒密码的加密算法极其简单。
其加密过程如下:在这里,我们做此约定:明文记为m,密文记为c,加密变换记为E(k1,m)(其中k1为密钥),解密变换记为D(k2,m)(k2为解密密钥)(在这里k1=k2,不妨记为k)。
凯撒密码的加密过程可记为如下一个变换:c≡m+k mod n (其中n为基本字符个数)同样,解密过程可表示为:m≡c+k mod n (其中n为基本字符个数)对于计算机而言,n可取256或128,m、k、c均为一个8bit的二进制数。
显然,这种加密算法极不安全,即使采用穷举法,最多也只要255次即可破译。
当然,究其本身而言,仍然是一个单表置换,因此,频率分析法对其仍是有效的。
密码学技术课程设计

密码学技术课程设计一、教学目标本课程旨在让学生了解和掌握密码学的基本原理和技术,包括对称加密、非对称加密、哈希函数、数字签名等,培养学生运用密码学技术解决实际问题的能力。
1.掌握密码学的定义、发展历程和基本概念。
2.理解对称加密、非对称加密、哈希函数、数字签名等基本技术。
3.了解密码学在信息安全领域的应用。
4.能够运用对称加密和非对称加密技术实现数据的加密和解密。
5.能够使用哈希函数对数据进行摘要和验证。
6.能够创建和验证数字签名,实现数据的真实性和完整性验证。
情感态度价值观目标:1.培养学生对密码学技术的兴趣,提高学生主动学习的积极性。
2.培养学生严格遵守密码学规则和法律法规,增强学生的信息安全意识。
二、教学内容本课程的教学内容主要包括密码学的基本原理、对称加密、非对称加密、哈希函数、数字签名等。
1.密码学的基本原理:密码学的定义、发展历程、基本概念。
2.对称加密:对称加密的原理、常见对称加密算法(如DES、AES等)。
3.非对称加密:非对称加密的原理、常见非对称加密算法(如RSA、ECC等)。
4.哈希函数:哈希函数的定义、性质、常见哈希函数(如MD5、SHA-1等)。
5.数字签名:数字签名的原理、常见数字签名算法(如RSA签名、ECDSA等)。
三、教学方法本课程采用讲授法、案例分析法和实验法相结合的教学方法。
1.讲授法:通过讲解密码学的基本原理、算法和应用,使学生掌握密码学的基本知识。
2.案例分析法:通过分析典型的密码学应用案例,使学生了解密码学在信息安全领域的实际应用。
3.实验法:通过实验操作,让学生亲手实践密码学的各种算法,提高学生的实际操作能力。
四、教学资源1.教材:选用权威、实用的教材,如《密码学导论》、《信息安全原理与实践》等。
2.参考书:提供相关的参考书籍,如《密码学手册》、《数字签名与加密技术》等。
3.多媒体资料:制作精美的PPT课件,为学生提供直观的学习资料。
4.实验设备:准备计算机、网络设备等实验器材,为学生提供实践操作的机会。
密码学课程设计

//System.out.println("请输入种子:");
//Scanner get_seed=new Scanner(System.in);
//seed=get_seed.nextInt();
Calendar c=Calendar.getInstance();
伪随机数序列{ xn}通过下列迭代方程得到:
xn+1=(axn+c)modm
如果m、a、c和x0都是整数,那么通过这个迭代方程将产生一系列的整数,其中每个数都在0 ≤ xn < m的范围内。数值m、a和c的选择对于建立一个好的伪随机数产生器十分关键。为了形成一个很长的伪随机数序列,需要将m设置为一个很大的数。一个常用准则是将m选为几乎等于一个给定计算机所能表示的最大非负整数。因而,在一个32位计算机上,通常选择的m值是一个接近或等于231的整数。此外,为了使得随机数列不易被重现, 可以使用当前时间的毫秒数作为初始种子的位置。
附录:实验代码:(完整的源程序)
1线性同余
import java.util.Calendar;
import java.util.Scanner;
public class Main{
static double seed;
static int rez;
static int m;
public static void main(String[] args) {
线性反馈移位寄存器(LFSR),它是由n个D触发器和若干个异或门组成的,如下图:
其中,gn为反馈系数,取值只能为0或1,取为0时表明不存在该反馈之路,取为1时表明存在该反馈之路;n个D触发器最多可以提供2^n-1个状态(不包括全0的状态),为了保证这些状态没有重复,gn的选择必须满足一定的条件。下面以n=3,g0=1,g1=1,g2=0,g3=1为例,说明LFSR的特性,具有该参数的LFSR结构如下图:
密码学课程设计信息安全

密码学课程设计信息安全一、教学目标本课程旨在通过学习密码学的基本原理和技术,使学生了解信息安全的重要性,掌握密码学的基本概念、加密算法、解密算法和密码协议,培养学生运用密码学知识分析和解决信息安全问题的能力。
1.了解密码学的基本概念和分类;2.掌握常见的加密算法(如DES、RSA等)和密码协议(如SSL/TLS等);3.了解密码学在信息安全领域的应用。
4.能够使用密码学算法进行数据加密和解密;5.能够分析和评估密码协议的安全性;6.能够运用密码学知识解决实际的信息安全问题。
情感态度价值观目标:1.增强学生对信息安全的意识,认识到密码学在保护信息安全中的重要性;2.培养学生对密码学研究的兴趣,激发学生探索和创新的精神;3.培养学生遵守信息安全法律法规,具有良好的道德品质和职业操守。
二、教学内容本课程的教学内容主要包括密码学的基本概念、加密算法、解密算法和密码协议。
具体安排如下:1.密码学的基本概念:密码学的发展历程、密码体制、加密与解密的基本原理;2.加密算法:对称加密算法(如DES、AES等)、非对称加密算法(如RSA、ECC等);3.解密算法:解密算法的基本原理和实现方法;4.密码协议:SSL/TLS协议、Kerberos协议等;5.密码学在信息安全领域的应用:数字签名、身份认证、数据完整性保护等。
三、教学方法本课程采用多种教学方法,以激发学生的学习兴趣和主动性,提高学生的实践能力。
具体方法如下:1.讲授法:通过讲解密码学的基本概念、原理和算法,使学生掌握密码学的基本知识;2.案例分析法:分析实际的信息安全案例,使学生了解密码学在实际应用中的作用;3.实验法:通过实验操作,让学生亲自体验密码学算法的加密和解密过程,提高学生的实践能力;4.讨论法:学生进行分组讨论,促进学生之间的交流与合作,培养学生的创新思维。
四、教学资源本课程的教学资源包括教材、参考书、多媒体资料和实验设备。
具体资源如下:1.教材:选用权威、实用的密码学教材,如《密码学导论》、《信息安全密码学》等;2.参考书:提供相关的密码学参考书籍,如《密码学手册》、《现代密码学》等;3.多媒体资料:制作精美的教学PPT,提供相关的视频教程、动画演示等;4.实验设备:配置相应的实验设备,如计算机、网络设备等,以支持实验教学的开展。
加密的课程设计

加密的课程设计一、教学目标本课程旨在让学生了解和掌握加密的基本概念、原理和技术,提高他们在信息安全和网络安全方面的意识。
通过本课程的学习,学生应达到以下目标:1.知识目标:a.理解加密的基本概念,包括加密的定义、分类和应用场景。
b.掌握常见的加密算法,如对称加密、非对称加密和哈希算法。
c.了解加密技术在信息安全中的应用,如数据保护、身份验证和数字签名等。
2.技能目标:a.能够使用常见的加密工具和软件进行加密和解密操作。
b.能够设计和实现简单的加密算法。
c.能够分析加密技术的优缺点,并根据实际需求选择合适的加密方案。
3.情感态度价值观目标:a.增强学生对信息安全重要性的认识,提高他们对加密技术的兴趣和好奇心。
b.培养学生的创新精神和团队合作能力,使他们能够积极参与加密技术的研究和应用。
c.教育学生遵守加密技术的法律法规,明确加密技术在保护个人隐私和国家安全中的作用和责任。
二、教学内容本课程的教学内容主要包括以下几个方面:1.加密的基本概念:介绍加密的定义、分类和应用场景,使学生了解加密技术的基本概念。
2.常见加密算法:讲解对称加密、非对称加密和哈希算法等常见的加密算法,使学生掌握其原理和应用。
3.加密技术在信息安全中的应用:介绍加密技术在数据保护、身份验证和数字签名等方面的应用,使学生了解加密技术的重要性。
4.加密工具和软件的使用:讲解如何使用常见的加密工具和软件进行加密和解密操作,培养学生的实际操作能力。
5.加密算法的设计与实现:引导学生设计和实现简单的加密算法,培养学生的编程能力和创新精神。
6.加密技术的优缺点分析:使学生能够分析加密技术的优缺点,并根据实际需求选择合适的加密方案。
三、教学方法为了提高学生的学习兴趣和主动性,本课程将采用多种教学方法,如讲授法、讨论法、案例分析法和实验法等。
1.讲授法:通过讲解加密的基本概念、原理和技术,使学生掌握加密技术的基本知识。
2.讨论法:学生进行小组讨论,分享他们对加密技术的理解和观点,培养学生的团队合作能力。
《密码学》教学设计

《密码学》教学设计1. 简介本教学设计旨在介绍密码学的基本概念和应用,帮助学生理解密码学在信息安全中的重要性,并掌握密码学的基本理论和方法。
通过本课程的研究,学生将能够了解密码学的基础知识和主要算法,以及应用密码学保障数据安全的技术和策略。
2. 教学目标- 了解密码学的基本概念和定义;- 理解密码学在信息安全中的应用;- 掌握对称加密和非对称加密的原理和常用算法;- 熟悉数字签名和公钥基础设施的基本原理;- 能够应用密码学算法进行数据加密和解密;- 掌握密码学在网络通信和电子商务中的常见应用。
3. 教学内容3.1 密码学基础知识- 密码学定义和基本概念- 密码学的发展历史- 密码学在信息安全中的作用和应用3.2 对称加密算法- 对称加密原理和定义- 常见的对称加密算法:DES、AES、RC4等- 对称加密算法的应用和安全性评估3.3 非对称加密算法- 非对称加密原理和定义- 常见的非对称加密算法:RSA、Diffie-Hellman等- 非对称加密算法的应用和比较3.4 数字签名和公钥基础设施- 数字签名的概念和作用- 公钥基础设施的基本原理和组成部分- 数字证书的生成和验证过程3.5 密码学的应用与实践- 密码学在网络通信中的应用:SSL/TLS协议- 密码学在电子商务中的应用:数字支付、安全认证等- 密码学的未来发展趋势和挑战4. 教学方法- 授课讲解:通过讲解和示例演示,介绍密码学的基本概念和应用。
- 实践操作:引导学生进行密码学算法的实验和应用,加强理论与实践的结合。
- 讨论研究:组织学生进行小组讨论和案例分析,深入探讨密码学的应用场景和安全性问题。
- 作业评价:布置编程作业、实验报告等任务,用于评估学生的研究成果和能力。
5. 教学评估- 课堂参与:根据学生的课堂讨论和问题回答情况评价学生的积极参与度。
- 作业成绩:根据学生的作业质量和完成情况进行评分,包括编程作业和实验报告等。
- 研究成果:通过期末考试或项目评估,评价学生对密码学理论和应用的掌握程度。
密码学课程设计ocb

密码学课程设计ocb一、教学目标本课程旨在让学生了解和掌握密码学的基本概念、原理和应用,培养学生分析和解决密码学相关问题的能力。
具体目标如下:1.知识目标:(1)了解密码学的起源、发展及其在我国的历史地位。
(2)掌握基本的加密算法和解密算法。
(3)了解密码学在信息安全领域的应用。
2.技能目标:(1)能够运用密码学的基本原理和算法进行简单的加密和解密操作。
(2)能够分析和评估密码系统的安全性。
(3)能够运用密码学知识解决实际问题。
3.情感态度价值观目标:(1)培养学生对密码学学科的兴趣和好奇心。
(2)培养学生严谨的科学态度和良好的团队合作精神。
(3)增强学生的信息安全意识,提高学生保护个人信息的能力。
二、教学内容本课程的教学内容主要包括以下几个部分:1.密码学的起源和发展:介绍密码学的起源、发展历程以及在我国的历史地位。
2.基本概念:讲解密码、加密、解密、密钥等基本概念。
3.加密算法:介绍常见的加密算法,如对称加密、非对称加密和哈希算法等。
4.解密算法:介绍常见的解密算法,如私钥解密、公钥解密等。
5.密码学应用:讲解密码学在信息安全领域的应用,如数字签名、加密通信等。
6.密码系统安全性分析:分析密码系统的安全性,如破解方法、安全级别等。
三、教学方法为了提高教学效果,本课程将采用以下教学方法:1.讲授法:讲解基本概念、原理和算法。
2.案例分析法:分析实际案例,让学生更好地理解密码学应用。
3.实验法:让学生动手实践,加深对加密算法和解密算法的理解。
4.讨论法:学生分组讨论,培养学生的团队合作精神和沟通能力。
四、教学资源为了支持教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:选用国内权威出版社出版的密码学教材。
2.参考书:提供国内外知名专家编写的密码学著作。
3.多媒体资料:制作课件、视频等多媒体资料,丰富教学手段。
4.实验设备:配置相应的实验设备,如计算机、网络设备等,为学生提供实践机会。
五、教学评估本课程的评估方式包括平时表现、作业、考试等,以全面客观地评价学生的学习成果。
现代密码学课程设计

现代密码学课程设计一、课程概述现代密码学是一门关于信息安全的学科,主要研究保护信息在通信及存储中的安全性。
本课程设计旨在让学生从理论和实践两方面了解现代密码学的基础知识、常用算法以及应用实例,通过实现密码加解密算法、数字签名算法等,加深对现代密码学的理解,提高学生信息安全意识和实际编程能力。
二、教学目标•了解现代密码学的基本概念和密码学的发展历程;•掌握对称密钥算法和非对称密钥算法的基本原理;•掌握常用的密码学算法和协议,如AES、RSA、MD5、SHA等;•掌握常见的密码攻击方法的手段和防范措施;•能够结合实例了解密码学在信息安全领域的应用。
三、教学内容3.1 现代密码学基础•密码学的定义和发展历程•密码学的基本概念、分类和研究对象•密码学中的术语和符号3.2 对称加密算法•对称加密算法的基本原理•常用的对称加密算法:DES、3DES、AES等•实现对称加密算法的案例3.3 非对称加密算法•非对称加密算法的基本原理•常用的非对称加密算法:RSA、ECC等•实现非对称加密算法的案例3.4 哈希算法•哈希算法的基本原理•常用的哈希算法:MD5、SHA等•实现哈希算法的案例3.5 数字签名算法•数字签名算法的原理和应用•常用的数字签名算法:RSA、DSA等•实现数字签名算法的案例3.6 密码攻击与防范•常见的密码攻击方式:暴力破解、字典攻击、重放攻击等•密码攻击技术的分类和流程•密码攻击防范和对策3.7 现代密码学应用实例•SSL/TLS协议的原理和实现•HTTPS协议的原理和实现•VPN的实现和应用四、教学方法本课程设计采用授课、讲解、案例演示、群体讨论等多种教学方法相结合,以提高学生的学习兴趣和参与度。
同时,鼓励学生在本课程设计的实践环节中,利用程序实现加解密算法、数字签名等,同时进行实际的密码攻击和防范。
五、考核方式•课程论文:涵盖对现代密码学的基本概念及其在信息安全领域中的应用、常用算法的原理和具体实现以及密码攻击和防范等方面。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
南京航空航天大学课程设计报告课程名称密码学课程设计学院计算机科学与技术年级2014学生姓名陶超权学号*********开课时间2016 至2017 学年第一学期总成绩教师签名一、实验目的通过实现简单的古典密码算法,理解密码学的相关概念如明文(plaintext )、密文(ciphertext )、加密密钥(encryption key )、解密密钥(decryption key )、加密算法(encryption algorithm)、解密算法(decryption algorithm )等。
二、实验内容1)用C\C++语言实现单表仿射(Affine )加/解密算法;2)用C\C++语言实现统计26个英文字母出现频率的程序;3)利用单表仿射加/解密程序对一段较长的英文文章进行加密,再对明文和密文中字母出现的频率进行统计并作对比,观察有什么规律。
仿射变换:加密:()26mod )(21m k k m E c k +==解密:()26mod )(112k c k c D m k -==- 其中,k 1和k 2为密钥,k 1∈Z q ,k 2∈Z q *。
三、实验步骤1)在main 函数中构建框架,函数主要分为三部分,加密,解密,计算字符出现频率;2)加密函数encrypt(),首先需要输入两个密钥K1,k2,需要注意k2是和26互质的,所以这里用gcd()函数判断了k2与26的最大公约数,加解密都采用了文件操作,明文和密文都保存在文件中,这里加密时根据ascii 码,对大小字母分别加密,其他字符则保持不变;3)解密函数decode(),和加密函数类似,需要注意解密要用到密钥K2的逆元,所以这里用函数inverse_k2()进行了逆元的求解,另外需要注意的是解密运算过程中可能出现数值为负数的情况,在模运算下应该将它们重新置为整数。
4)计算字符频率函数calculateCharFreq(),这里只对大小字母进行统计,不计其他字符。
源代码:********************* main.cpp **********************#include<stdio.h>#include<stdlib.h>int main (){void encrypt ();void decode ();void calculateCharFreq ();int choice;printf("please input your choice:\n");printf("\t1. encrypt\n\t2.decode\n\t3.calculate character frequence\n\t4.quit&exit\n");scanf("%d",&choice);getchar();while(1){switch(choice){case1:encrypt();break;case2:decode();break;case3:calculateCharFreq();break;case4:return0;default:break;}printf("please input your choice:\n");printf("\t1. encrypt\n\t2.decode\n\t3.calculate character frequence\n\t4.quit&exit\n");scanf("%d",&choice);getchar();}return0;}*************************** encrypt.cpp ********************* #include<stdlib.h>#include<stdio.h>void encrypt(){int gcd(int,int);printf("please input secret key\n");printf("k1:");int k1,k2;scanf("%d",&k1);getchar();while(k1<0|| k1>=26){printf("illegal k1!please input agian!\n"); printf("k1:");scanf("%d",&k1);getchar();}printf("k2:");scanf("%d",&k2);getchar();while(gcd(k2,26)!=1){printf("illegal k2!please input agian!");printf("k2:");scanf("%d",&k2);getchar();}// char plainText[100]={'\0'};// char cypherText[100]={'\0'};printf("open the plain text file\n");//scanf("%s",plainText);FILE *fplain,*fcypher;if((fplain =fopen("plain.txt","a+"))==NULL){printf("can't open plain.txt!\n'");exit(0);}if((fcypher = fopen("cypher.txt","a"))==NULL) {printf("can't open cypher.txt!\n'");exit(0);}//int i;char plainText = fgetc(fplain);char cypherText;//for(i=0; plainText[i]!='\0'; i++)// printf("%c",plainText);while(plainText != EOF){// printf("old:%d\n",plainText[i]);if(65<=plainText&& plainText<=90 ){// printf(".......................");// plainText[i]-=65;cypherText = ((plainText-65)*k2+k1)%26+65;fputc(cypherText,fcypher);// printf("new:%d\n",cypherText[i]);}else if(97<=plainText && plainText<=122 ){//plainText[i]-=97;cypherText = ((plainText-97)*k2+k1)%26+97;fputc(cypherText,fcypher);// printf("new:%d\n",cypherText[i]);}else{cypherText=plainText;fputc(cypherText,fcypher);}plainText = fgetc(fplain);// printf("%c\t%c",plainText[i],cypherText[i]);}}fclose(fplain);fclose(fcypher);printf("cipher text has been written into cypher.txt!\n");// printf("%s\n\n",cypherText);}************************* decode.cpp ************************* #include<stdlib.h>#include<stdio.h>void decode(){int gcd(int,int);int inverse(int);// char cypherText[100]={'\0'};// char plainText[200]={'\0'};printf("please input secret key\n");printf("k1:");int k1,k2;scanf("%d",&k1);getchar();while(k1<0|| k1>=26){printf("illegal k1!please input agian!\n"); printf("k1:");scanf("%d",&k1);getchar();}printf("k2:");scanf("%d",&k2);getchar();while(gcd(k2,26)!=1){printf("illegal k2!please input agian!");printf("k2:");scanf("%d",&k2);getchar();}int inverse_k2 = inverse(k2);printf("open the cypher txt!\n");// scanf("%s",cypherText);FILE *fplain,*fcypher;if((fplain =fopen("plain1.txt","a"))==NULL){printf("can't open plain.txt!\n'");exit(0);}if((fcypher = fopen("cypher.txt","r"))==NULL) {printf("can't open cypher.txt!\n'");exit(0);}//int i;char cypherText = fgetc(fcypher);char plainText;//for(i=0; plainText[i]!='\0'; i++)// printf("%c",plainText);// int i;// for(i=0; cypherText[i]!='\0'; i++)while(cypherText!=EOF){// printf("old:%d\n",plainText[i]);if(65<=cypherText&& cypherText<=90 ){// printf(".......................");// plainText[i]-=65;int t= cypherText-65-k1 ;if(t<0){int i=1;while(t<0){t+=26 * i ;i++;}}plainText = ((t*inverse_k2)%26)+65;fputc(plainText,fplain);// printf("new:%d\n",cypherText[i]);}else if(97<=cypherText && cypherText<=122 ) {//plainText[i]-=97;int t= cypherText-97-k1 ;if(t<0){int i=1;while(t<0){t+=26 * i ;i++;}}plainText = ((t*inverse_k2)%26)+97;// printf("new:%d\n",plainText);fputc(plainText,fplain);}else{plainText=cypherText;fputc(plainText,fplain);}//printf("%c\t%c",plainText[i],cypherText[i]);}cypherText= fgetc(fcypher);}fclose(fplain);fclose(fcypher);printf("plain text has been written into plain1.txt!\n");// printf("%s\n\n",plainText);}int gcd(int x, int y){int t=0;//int t1=x;//int t2=y;while(y!=0){t = x%y;x = y;y = t;}//printf("%d",x);return x;}int inverse(int x){int i;for( i=0; i<26; i++){if((i*x)%26==1){break;}}// printf("%d\n",i);return i;}*********************** charFreq.cpp ************************* #include<stdio.h>#include<stdlib.h>void calculateCharFreq(){char filename[10]={'\0'};char ch;FILE * fp;float sum=0;float freq[26]={0};float charNum[26]={0};printf("please input the filename you wanna staticstic frequence:\n ");//getchar();gets(filename);//getchar();if((fp =fopen(filename,"r"))==NULL){printf("can't open %s!\n",filename);exit(0);}ch = fgetc(fp);while(ch != EOF){if('a'<=ch &&ch<='z'){charNum[ch-97]++;sum++;//printf("charNum:%f\tsum:%f\n",charNum[ch-97],sum);}else if(ch>='A'&& ch<='Z'){charNum[ch-65]++;sum++;}//printf("%c\n",ch);ch=fgetc(fp);}fclose(fp);//char t = 0;int count=0;for(int i=0;i<26;i++){freq[i]= charNum[i]/sum;//printf("charNUm:%f\tsum:%f\tfreq:%f\n",charNum[i],sum,freq[i]);printf("%c(%c):%.3f\t",i+65,i+97,freq[i]);count++;if(count==6){printf("\n");count=0;}}printf("\n\n");}四、实验结果及分析这里明文选取了普朗特的就职演说,得到明文密文各个字符的频率如下:可以看出,在明文中,出现频率最高的是e:0.123 , t:0.089, a:0.082, o:0.081, n:0.070在密文中,出现频率最高的是O:0.123, h:0.089, c:0.082, s:0.081, p:0.070经过计算可以知道字符o h c s p正是字符e t a o n的加密变换由此可知,单表仿射加密是一种线性的加密,加密后字符的统计特性没有发生变化,只是字符不同而已。