密码学实验指导

合集下载

密码学案例实验报告书

密码学案例实验报告书

一、实验背景随着信息技术的飞速发展,信息安全问题日益突出。

密码学作为保障信息安全的核心技术,在数据加密、身份认证、数字签名等领域发挥着重要作用。

为了加深对密码学原理的理解,提高实际应用能力,我们开展了本次密码学案例实验。

二、实验目的1. 掌握DES加密算法的基本原理和操作步骤。

2. 熟悉RSA加密算法的原理和应用。

3. 学习数字签名技术的应用。

4. 培养动手实践能力,提高解决实际问题的能力。

三、实验内容1. DES加密算法(1)实验目的:了解DES加密算法的基本原理,掌握DES加密和解密过程。

(2)实验内容:① 设计一个简单的DES加密程序,实现明文到密文的转换。

② 设计一个简单的DES解密程序,实现密文到明文的转换。

(3)实验步骤:① 编写DES加密程序,输入明文和密钥,输出密文。

② 编写DES解密程序,输入密文和密钥,输出明文。

2. RSA加密算法(1)实验目的:了解RSA加密算法的基本原理,掌握RSA加密和解密过程。

(2)实验内容:① 设计一个简单的RSA加密程序,实现明文到密文的转换。

② 设计一个简单的RSA解密程序,实现密文到明文的转换。

(3)实验步骤:① 编写RSA加密程序,输入明文和密钥对,输出密文。

② 编写RSA解密程序,输入密文和私钥,输出明文。

3. 数字签名技术(1)实验目的:了解数字签名技术的基本原理,掌握数字签名的生成和验证过程。

(2)实验内容:① 设计一个简单的数字签名程序,实现签名生成和验证。

(3)实验步骤:① 编写数字签名程序,输入明文、私钥和签名算法,输出签名。

② 编写数字签名验证程序,输入明文、公钥和签名,验证签名是否正确。

四、实验结果与分析1. DES加密算法实验结果通过编写DES加密和解密程序,成功实现了明文到密文和密文到明文的转换。

实验结果表明,DES加密算法在保证数据安全的同时,具有较高的效率。

2. RSA加密算法实验结果通过编写RSA加密和解密程序,成功实现了明文到密文和密文到明文的转换。

密码学基础实验讲义

密码学基础实验讲义

常熟理工学院计算机科学与工程系《密码学基础》实验指导书网络工程系2009年7月实验一、熟悉CAP4一、实验目的与要求通过实验,使学生对密码学有一定的感性认识;学会正确使用CAP(Cryptographic Analysis Program v4)软件,验证课堂中所学的古典密码算法;为学习现代密码算法及其应用奠定基础。

二、实验内容1、熟悉使用CAP4软件2、使用CAP4,验证课本中的一些加密算法,如凯撒密码、仿射密码等。

三、实验指导CAP是由Dr. Richard Spillman专门为教学而研制的密码制作和分析的工具(CAP is a general purpose tool for making and breaking ciphers. It is intended for educational purposes only. Dr. Richard Spillman is not responsible for any lost data or errors in the software.),已经在美国的很多高校得到了广泛地使用,受到了密码学习者的普遍欢迎。

CAP4的软件界面如下:基本涵盖了经典密码学和现代密码学中的算法,主要包括:Simple Shift,ADFGVX,Affine,AutoKey,Bazeries Cylinder,Celluler Automata 1d,Celluler Automata 2d,Column Trasposition,DES, DES Stream,Elgamal,Four Square,Hill,KeyWord,Knapsack,MultiLiteral,Nihilist,Permutation,Playfair,RC4,Rotor,RSA,Vigenere等等。

“Affine”,出现如下图所示的弹出框。

注意:菜单“Encipher”和“Decipher”是灰色的。

现代密码学实验指导书

现代密码学实验指导书

5. if (a-b ) < 0, (t ← a, a ← b, b ← t ); 6. a ← (a-b )
7. if a = 0, g = 2 g b, input b, end , else goto 4.
(
)
2. 扩展 Euclid 算法
设m ∈ Z + ,b ∈ Z,求 b 的模 m 的乘法逆元 b −1。
z
0.001
其中:以上字母分成 5 组: 1. 2. 3. 4. 5. e 的概率大约为 0.120 t,a,o,i,n,s,h,r 的概率为 0.06-0.09 d,l 的概率大约为 0.4 c,d,m,w,f,g,y.p,b 的概率为 0.015-0.023 v,k,j,x,q,z 的概率小于 0.01
a
0.082
b
0.015
c
0.028
d
0.043
e
0.127
f
0.022
g
0.020
h
0.061
i
0.070
j
0.002
k
0.008
l
0.040
m
0.024
n
0.067
o
0.075
p
0.019
q
0.001
r
0.060
s
0.063
t
0.091
u
0.028
v
0.010
w
0.023
x
0.001
y
0.020
3. 维吉尼亚密码的分析方法
z z 用卡西斯基测试法或重合指数法确定密钥长度 确定每个子密钥
五、
实验报告要求
程序给出源代码和相应的注释,密码分析部分给出详细推导或计算过程和程序实现则要 给出全部代码。

实验吧_密码学实验报告(3篇)

实验吧_密码学实验报告(3篇)

第1篇一、实验背景密码学是一门研究信息加密与解密的学科,它广泛应用于信息安全领域。

为了更好地理解密码学的基本原理和算法,我们选择了实验吧平台上的密码学实验进行学习。

本次实验旨在通过实际操作,加深对古典密码、对称密码和不对称密码等密码学基本概念的理解,提高密码学应用能力。

二、实验目的1. 理解并掌握古典密码的基本原理和算法;2. 掌握对称密码和不对称密码的基本原理和算法;3. 通过实验操作,提高密码学应用能力;4. 培养团队协作和解决问题的能力。

三、实验内容1. 古典密码实验(1)仿射密码原理:仿射密码是一种单字母替换密码,加密公式为:C = (aP + b) mod 26,其中C为密文字母,P为明文字母,a和b为密钥。

操作步骤:1)编写加密函数encrypt,实现仿射密码加密;2)编写解密函数decrypt,实现仿射密码解密;3)测试加密和解密函数,验证其正确性。

(2)单表代替密码原理:单表代替密码是一种将明文字符映射到密文字符的替换密码。

操作步骤:1)编写加密函数subencrypt,实现单表代替密码加密;2)编写解密函数subdecrypt,实现单表代替密码解密;3)测试加密和解密函数,验证其正确性。

(3)维吉尼亚密码原理:维吉尼亚密码是一种多字母替换密码,加密公式为:C = (P + K[i]) mod 26,其中C为密文字母,P为明文字母,K为密钥,i为索引。

操作步骤:1)编写加密函数vigenereencrypt,实现维吉尼亚密码加密;2)编写解密函数vigeneredecrypt,实现维吉尼亚密码解密;3)测试加密和解密函数,验证其正确性。

2. 对称密码实验(1)DES加密算法原理:DES(Data Encryption Standard)是一种分组加密算法,采用56位密钥,64位分组。

操作步骤:1)编写DES加密函数desencrypt,实现DES加密;2)编写DES解密函数desdecrypt,实现DES解密;3)测试加密和解密函数,验证其正确性。

《密码学》课程设计实验报告-分组密码工作模式

《密码学》课程设计实验报告-分组密码工作模式

《密码学》课程设计实验报告实验序号:03 实验项目名称:分组密码工作模式分组工作模式具体说明➢电话本模式⏹直接利用分组密码对明文的各分组进行加密⏹缺点1.不能解决短块问题2.容易暴露明文的数据模式。

在计算机系统中,许多数据都具有某种固有的模式,这主要是由数据冗余和数据结构引起的。

例如,各种计算机语言的语句和指令都十分有限,因为在程序中便表现为少量的语句和指令的大量重复⏹流程图➢明密文链接模式⏹设明文M=(M1,⋯,M n),相应的密文C=(C1,⋯,C n)C i={E(M i⊕Z,K), i=1E(M i⊕M i−1⊕C i−1,K), i=2,⋯,n⏹特点1.加解密错误传播无界2.无法处理短块⏹流程图➢密文链接模式⏹由于明密文链接模式具有加解密错误传播无界的特性,而磁盘等文件通常希望错误传播有界,这时可采用密文链接模式⏹设明文M=(M1,⋯,M n),相应的密文C=(C1,⋯,C n)C i={E(M i⊕Z,K), i=1E(M i⊕C i−1,K), i=2,⋯,n⏹特点1.无法处理短块2.加密错误传播无界,解密错误传播有界➢输出反馈模式⏹将一个分组密码转换为一个密钥序列产生器,从而可以实现用分组密码按流密码的方式进行加解密。

⏹特点1.工作模式的安全性取决于分组密码本身的安全性2.可以解决短块加密3.无错误传播4.适用于加密冗余度较大的数据,例如语音和图像数据⏹流程图➢密文反馈模式⏹与输出反馈的工作原理基本相同,所不同的仅仅是反馈到移位寄存器R的不是E输出中的最右s位,而是密文c i的s位⏹流程图➢X CBC模式⏹X CBC模式解决了CBC模式要求明文数据的长度是密码分组长度的整数倍的限制,可以处理任意长的数据⏹优点1.可以处理任意长度的数据2.适用于计算产生检测数据完整性的消息认证码MAC⏹缺点1.使用3个密钥,密钥的存储和加解密控制都比较麻烦2.接受双方需要共享填充的消息长度➢CTR模式⏹与密文反馈工作模式和输出反馈工作模式一样,把分组密码转换为序列密码,在本质上是利用分组密码产生密钥序列,按序列密码的方式进行加密⏹优点1.可并行,效率高2.适合任意长度的数据3.加解密速度快⏹缺点1.没有错误传播,不适用于数据完整性验证⏹流程图五、分析与讨论1)分组密码不同的工作模式各有各的特点,例如有些工作模式需要处理短块,有些则不需要;有些模式具有错误传播无界的特性,有些则没有。

密码学相关实验报告

密码学相关实验报告

一、实验目的1. 理解并掌握常见的加密算法和密码体制的基本原理。

2. 学会使用密码学工具进行加密和解密操作。

3. 增强网络安全意识,提高对密码学在实际应用中的认识。

二、实验内容1. 仿射密码2. 单表代替密码3. 维吉尼亚密码4. AES加密算法三、实验原理1. 仿射密码:加密原理为将明文进行0~25字母编码,按照加密公式计算出密文对应位置的字母编码,最后从密文的字母编码还原出密文对应位置的字母。

解密原理与加密原理相反。

2. 单表代替密码:加密原理为利用代替表,将明文中的每个字符映射到密文。

解密原理为对代替表进行反向查找,由密文映射回明文。

3. 维吉尼亚密码:加密原理为通过加密方程Ci (pi k(i mod m)) mod 26,由明文得到密文。

解密原理为解密过程是加密过程的逆过程,通过解密方程pi (Cik(i mod m)) mod 26。

4. AES加密算法:是一种分组加密算法,将128位明文分为128位的数据块,使用密钥进行加密,得到128位的密文。

解密过程与加密过程相反。

四、实验步骤1. 仿射密码(1)选择明文:选择一段英文或数字,例如:"Hello World!"(2)选择密钥:选择一个密钥a和模数m,例如:a=5,m=26。

(3)加密:将明文进行0~25字母编码,按照加密公式计算出密文对应位置的字母编码,最后从密文的字母编码还原出密文对应位置的字母。

(4)解密:将密文进行0~25字母编码,按照解密公式计算出明文对应位置的字母编码,最后从明文的字母编码还原出明文对应位置的字母。

2. 单表代替密码(1)构造代替表:选择一个代替表,将明文中的每个字符映射到密文。

(2)加密:将明文中的每个字符按照代替表进行映射,得到密文。

(3)解密:将密文中的每个字符按照代替表的逆映射,得到明文。

3. 维吉尼亚密码(1)选择密钥:选择一个密钥,例如:"KEY"(2)加密:将明文和密钥进行异或操作,得到密文。

《密码学》实验大纲

《密码学》实验大纲

课程编号:05212002课程名称:密码学课程性质:专业基础必修总学时:63(授课学时48,实验15)学分:3适用对象:信息安全专业、信息与计算科学专业、电子信息工程专业、计算机科学与技术专业、通信工程专业《密码学》实验教学大纲一、教育目标通过这些实验题目,使学生对于《密码学》课程教学的一些重要环节获得切实的感性认识,由此达到真正理解和领会的地步,并引导学生动手、动脑,使他们的有关实践能力与创新能力得以养成和提高。

二、教学说明1. 密码学实验是密码学教学的一个重要的辅助环节,是为加强学生对于有关理论和原理的感性认识和启发学生创造性思维而设计的;它的先修课程为《C语言程序设计》或《汇编语言程序设计》,学生必须在打好相应基础的前提下开展本课程。

2. 辅导教师必须深入学生之中,了解他(她)们的实际动手情况,尤其要通过实际检查,使每位学生切实学会使用有关程序语言的调试工具、切实领会有关程序编制的实质性要点和要求。

三、内容和基本要求实验一随机全排列生成程序及其应用开发(一)实验内容:1.编制生成0~n(n≤255)的一个全排列的程序,可选择下列两个方法之一或自行设计另外方法:方法1:从一个随机文件读取n+1字节数据d0, d1, L, d n。

由预先取定的一个0~n的全排列P(比如,可为0~n的自然排列)开始,依次对i=n, n-1, L,1,计算:j=d i-1+d i (mod i)交换P的第i项第j项(在此注意我们假定P从第0项开始)。

方法2:用一个随机函数产生m(m>n)字节数据d1, d2, L, d m。

对d1(mod (n+1)), d2(mod (n+1)), L, d m(mod (n+1))依次考察,把后面出现的与前相同者去掉;在最后剩下的数据中,把没有出现的0~n依序补写于后面。

2.对第一步生成随机全排列的程序,自己设计一种应用并予以实现。

(二)实验要求:1.程序须对不超过255的正整数n都容易生成0~n的一个全排列;2.对较小的n,抓图显示随机全排列生成程序的计算结果(附页),数据不能出现明显错误;3.每位同学设计的“一种对于随机全排列生成程序的应用”须有个性化特点、不与别人雷同。

密码学的实验报告

密码学的实验报告

一、实验目的1. 了解密码学的基本概念和原理;2. 掌握常用的加密算法和解密算法;3. 学会使用密码学工具进行加密和解密操作;4. 培养学生的实践能力和创新思维。

二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 密码学库:PyCryptodome三、实验内容1. 加密算法实验1.1 实现DES加密算法1.2 实现AES加密算法1.3 实现RSA加密算法2. 解密算法实验2.1 使用DES解密算法解密加密数据2.2 使用AES解密算法解密加密数据2.3 使用RSA解密算法解密加密数据3. 密钥管理实验3.1 生成DES密钥3.2 生成AES密钥3.3 生成RSA密钥对4. 密码学工具使用实验4.1 使用PyCryptodome库进行加密和解密操作4.2 使用在线加密工具进行加密和解密操作四、实验步骤1. 加密算法实验1.1 实现DES加密算法1.1.1 导入PyCryptodome库中的DES模块;1.1.2 生成DES密钥;1.1.3 使用DES密钥对明文进行加密;1.1.4 输出加密后的密文。

1.2 实现AES加密算法1.2.1 导入PyCryptodome库中的AES模块;1.2.2 生成AES密钥;1.2.3 使用AES密钥对明文进行加密;1.2.4 输出加密后的密文。

1.3 实现RSA加密算法1.3.1 导入PyCryptodome库中的RSA模块;1.3.2 生成RSA密钥对;1.3.3 使用公钥对明文进行加密;1.3.4 输出加密后的密文。

2. 解密算法实验2.1 使用DES解密算法解密加密数据2.1.1 导入PyCryptodome库中的DES模块;2.1.2 使用DES密钥对密文进行解密;2.1.3 输出解密后的明文。

2.2 使用AES解密算法解密加密数据2.2.1 导入PyCryptodome库中的AES模块;2.2.2 使用AES密钥对密文进行解密;2.2.3 输出解密后的明文。

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

密码学实验指导目录实验一凯撒密码算法实验 1 实验二维吉利亚密码算法实验 5 实验三普莱费尔密码算法实验 9 实验四 IDEA密码算法实验 17 实验五 BCH纠错编码算法任务书 27实验一凯撒密码算法实验1 实验目的通过实验熟练掌握凯撒密码算法,学会凯撒密码算法程序设计,提高C++程序设计能力。

2 实验学时:2实验类别:验证实验■综合性实验□设计性实验□3 实验环境软件环境Windows Xp/Windows 2000Visual c++/Turbo c++ 3.0硬件系统Pentium 4 3.0G 512MRAM 计算机等4 算法原理按照a~z依次对应0~25编码,变量K存放密钥-正整数。

变量M存放一明文字符ASCII码,变量C存放M中的数据经加密后得到的一密文字符的ASCII码。

加密算法:C≡(M+K)mod 26,如此继续下去,实现逐个字符进行加密。

5 实验步骤与内容1)编写程序2)编辑录入3)记录调试及进行情况4)程序结构说明文档5)程序使用说明文档6 思考密钥K的有效的最小取值范围7 实验总结与体会8 要求提交完整的实验报告9 参考程序代码#include <iostream>#include <string>using namespace std;//获取密钥函数getKey()int getKey(){int key;cout<<"请输入密钥:";cin>>key;return key;}//将明文中的字符全部转化为大写的函数change()void change(char s[]){int i;for(i=0;i<strlen(s);i++){if(s[i]>96&&s[i]<122)s[i] = s[i]-32;}}//判断输入的明文格式是否有误的函数getError()//有误则返回0,否则就返回1int getError(char s[]){int i,error;for(i=0;i<strlen(s);i++){if((s[i]>65&&s[i]<=82)||(s[i]>96&&s[i]<=122)){error = 1;}else {error = 0;break;}}return error;}//将明文转化为密文的函数getCodevoid getCode(char s[],char ss[],int key) {int i,j;cout<<"译出的密文:";for(i = 0;i<strlen(ss);i++){for(j = 0;j<26;j++){if(ss[i]==s[j]){cout<<s[(j+key)%26];}}}cout<<endl;;}void main(){char ss[26],incode[1000];int i,key,asc=65;for(i = 0;i<26;i++){ss[i] = asc++;}key = getKey();cout<<"请输入密文:\n";getchar('\n');gets(incode);if(getError(incode)==0){cout<<"您的输入有误!请重新输入!\n";exit(1);}change(incode);getCode(ss,incode,key);}实验二维吉利亚密码算法实验1 实验目的通过实验熟练掌握维吉利亚密码算法,学会维吉利亚密码算法程序设计,提高C++程序设计能力。

2 实验学时:2实验类别:验证实验■综合性实验□设计性实验□3 实验环境软件环境Windows Xp/Windows 2000Visual c++/Turbo c++ 3.0硬件系统Pentium 4 3.0G 512MRAM 计算机等4 算法原理按照a~z依次对应0~25编码,数组K密钥字符串的ASCII码,数组M存放一组明文字符串ASCII码,且length(M)=length(K)=n,数组C存放M中的数据经加密后得到的一组密文字符串的ASCII码。

加密算法:C(i)≡(M(i)+K(i))mod 26 (i=1,2,……,n)5 实验步骤与内容1)编写程序2)编辑录入3)记录调试及进行情况4)程序结构说明文档5)程序使用说明文档6 实验总结与体会7 要求提交完整的实验报告8 参考程序代码//Vigenere.cpp文件源代码#include <iostream>#include <string>using namespace std;//将字符串小写变为大写void change(char s[]){int i;for(i=0;i<strlen(s);i++){if(s[i]>96&&s[i]<122)s[i] = s[i]-32;}}void makeCode(char incode[],char ss[],char key[],int intkey[]) {cout<<"译出的密文为:";for(int i = 0;i<strlen(incode);i++){for(int j = 0;j<26;j++){//逐个比较if(incode[i]==ss[j]){//逐个输出密文cout<<ss[(j+intkey[i%4])%26];}}if((i+1)%strlen(key)==0){cout<<" ";}}}void main(){char ss[26];int i,j;//按照A~Z(大写)依次对应存储在char数组ss[] for(i = 0;i<26;i++){ss[i] = i+65;}char select;do{char incode[1000];cout<<"请输入明文:";cin>>incode;//将明文小写变为大写change(incode);char key[100];int intkey[100];cout<<"请输入密钥:";cin>>key;//将密钥小写变为大写change(key);//将密钥对应的下标存放在数组intkey[]中for(i = 0;i<strlen(key);i++){for(j = 0;j<26;j++){//逐个比较if(key[i]==ss[j]){intkey[i] = j;}}}实验三普莱费尔密码算法实验1 实验目的通过实验熟练掌握普莱费尔密码算法,学会普莱费尔码算法程序设计,提高C++程序设计能力。

2 实验学时:4实验类别:验证实验■综合性实验□设计性实验□3 实验环境软件环境Windows Xp/Windows 2000Visual c++/Turbo c++ 3.0硬件系统Pentium 4 3.0G 512MRAM 计算机等4 算法原理将明文中的双字母组合作为一个单元对待,并将这些单元转换为密文双字母组合。

Playfair密码基于一个5*5字母矩阵,该矩阵使用一个关键词(密钥)来构造,其构造方法是:从左至右,从上至下依次填入关键词的字母(去除重复的字母),然后再以字母表顺序依次填入其他的字母。

字母I和J被算作一个字母(即J被当作I处理)。

对每一对明文字母p1,p2的加密方法如下。

(1)若p1,p2在同一行时,则对应的密文c1,c2分别是仅靠p1,p2右端的字母。

其中第一行被看做是最后一行的右方(解密时反向)。

(2)若p1,p2在同一列时,则对应的密文c1,c2分别是仅靠p1,p2下方的字母。

其中第一列被看做是最后一列的下方(解密时反向)。

(3)若p1,p2既不在同一行,也不在同一列时,则c1,c2是由p1和p2确定的矩形的其他两角的字母,并且c1和p1,c2和p2同行(解密时处理方法相同)。

(4)若p1=p2,则插入一个字母(比如Q,需要事先约定)于重复字母之间,并用前述方法处理。

(5)若明文字母数为奇数时,则在明文的末端添加某个事先约定的字母作为填充。

5 实验步骤与内容1)编写程序2)编辑录入3)记录调试及进行情况4)程序结构说明文档5)程序使用说明文档6 实验总结与体会7 要求提交完整的实验报告8 参考程序代码#include<iostream>#include<string>using namespace std;//寻找字符'J'int foundj(string s){for(int i=0;i<s.length();i++){if(s[i]=='J'){return i;}}}//将字符串小写变为大写void change(char s[]){int i;for(i=0;i<strlen(s);i++){if(s[i]>96&&s[i]<122)s[i] = s[i]-32;}}//去掉密钥中重复的字符void dele(char key[],string codekey) {int flagk;for(int i = 1;i<strlen(key);i++){flagk = 0;for(int j=0;j<i;j++){if(key[i]==key[j]){flagk=1;break;}}if(flagk ==0)codekey+=key[i];}for(i = 0;i<codekey.length();i++) key[i] = codekey[i];key[i] = '\0';change(key);}//寻找字符a对应的行下标和列下标void search(char a,int &i1,int &j1,char cod[5][5]){ int i,j;for(i=0;i<5;i++){for(j=0;j<5;j++)if(a==cod[i][j]){i1=i;j1=j;}}}//加密矩阵void juzhen(string codekey,char cod[][5],int m) {for(int i=0;i<m;i++)for(int j=0;j<5;j++)cod[i][j]=codekey[i*5+j];for(i=0;i<m;i++){for(int j=0;j<5;j++)cout<<cod[i][j]<<" ";cout<<endl;}}//加密算法string jiami(string codestr,char cod[5][5]){ int i;int i1,j1,i2,j2;string pt;pt=codestr;for(i=0;i<codestr.length()-1;){search(codestr[i], i1,j1,cod);search(codestr[i+1],i2,j2,cod);//处于不同的行列,取对角if(i1!=i2&&j1!=j2){pt[i]=cod[i1][j2];pt[i+1]=cod[i2][j1];}//处于同一行,取行紧靠的数据if(i1==i2&&j1!=j2){pt[i]=cod[i1][(j1+1)%5];pt[i+1]=cod[i2][(j2+1)%5];}//处于同列,取列紧靠的数据if(i1!=i2&&j1==j2){pt[i]=cod[(i1+1)%5][j2];pt[i+1]=cod[(i2+1)%5][j1];}i=i+2;}return pt;}void main(){cout<<"--------------普莱费尔密码加密-------------"<<endl;int j,k=0;cout<<"请输入密钥:";char key[1000],key1[1000];string codekey;cin>>key;codekey+=key[0];dele(key,codekey);//删除相同字符char code[26];for(int i=0;i<strlen(key);i++){code[i]=key[i];}//key赋给codekeyfor(i = 0;i<strlen(key);i++)codekey+=key[i];//26个大写字母赋给codefor(i = 0;i<26;i++)code[i] = i+65;//codekey连接codefor(i = 0;i<26;i++)codekey +=code[i];//key赋给key1for(i=0;i<strlen(key);i++){key1[i] = key[i];}key1[i] = '\0';//排序key1for(i=0;i<strlen(key1);i++){for(int j = i+1;j<strlen(key1);j++){if(key1[i]>key[j]){char t = key1[i];key1[i] = key1[j];key1[j] = t;}}}//删除key1中相同字符for(i=0;i<strlen(key1);i++){for(j=key1[i]-65-k;j<strlen(code);j++) {code[j] = code[j+1];}k++;}code[26-strlen(key1)] = '\0';codekey = key;codekey+=code;//处理i和jfor(i=foundj(codekey);i<codekey.length();i++) {codekey[i] = codekey[i+1];}//加密矩阵char cod[5][5];cout<<"加密矩阵为:"<<endl;juzhen(codekey,cod,5);//输入明文转化为大写cout<<"请输入明文:";string str,codstr;cin>>str;for(i=0;i<str.length();i++){if(str[i]>96&&str[i]<122)str[i] = str[i]-32;}//加密codstr=jiami(str,cod);cout<<"对应的密文为:---->>"<<codstr<<endl; }实验四 IDEA 密码算法实验1 实验目的通过实验熟练掌握IDEA 密码算法,学会IDEA 算法程序设计,提高C++程序设计能力。

相关文档
最新文档