古典密码学实验
实验二 古典密码

实验2 古典密码1.实验目的(1)了解古典密码中的基本加密运算。
(2)了解几种典型的古典密码体制。
(3)掌握古典密码的统计分析方法。
2.实验内容(1)古典密码体制①简单移位加密(单表代换)该加密方法中,加密时将明文中的每个字母向前推移K位。
经典恺撒密码加密变换就是这种变换,取k=3。
步骤1:打开CAP4软件,并加载实验一附带的“mw.txt”,如图2-1所示。
图2-1加载文件步骤2:采用恺撒加密方法手工加密“mw.txt”;打开CAP4菜单栏“Cipher”菜单项选择“simple shift”选项,并选择移位值“shift value”为3,加密步骤1中加载的文件,如图2-2所示。
图2-2 参数设置图2-3加密文件步骤3:比较二者的加密结果是否相同。
步骤4:点击CAP4软件中的“Simple analysis”下的“shift”键,观察恺撒加密法的可能密钥值,并分析其攻击的难度,如图2-4所示。
图2-4密钥分析②仿射密码加密(单表代换)在仿射密码加密(affine cipher)中,字母表中的字母被赋予一个数字,例如,a=0,b=1,c=2,…,z=25.仿射密码加密法的密钥为0~25之间的数字对(a,b)。
a与26的最大公约数必须为1,这就是说能整除a和26的数只有1.现在假设m为明文字母的数字,而c为密文字母的数字,那么,这两个数字之间有如下关系: c=(am+b)(mod 26)m=a-1(c-b)(mod 26)其中,(mod 26)的操作是:除以26,得其余数。
例如,选取密钥为(7,3)。
因为7与26互素,也就是只有公约数1,所以(7,3)可以作为仿射密码的加密钥。
将“hot”转换成数字7、14、19,利用仿射等式生成: c(H)=(7×7+3) mod 26=52 mod 26=0,即为字母“a“。
c(O)=(7×14+3) mod 26=101 mod 26=23,即为字母“x“.c(T)=(7×19+3) mod 26=136 mod 26=6,即为字母”g”. 这样,对于这个密钥,”hot”变成了“axg“.CAP4软件中实现仿射密码加密:步骤1:在CAP4软件中加载要加密地的明文“mw.txt“.步骤2:选取Cipher菜单下的Affine Cipher菜单项,弹出如下对话框,如图2-5所示。
2023年古典密码实验报告

实验报告一、试验室名称:SimpleSPC信息安全云试验系统二、试验项目名称:古典密码——置换密码三、试验课时:1课时四、试验原理:1) 算法原理a) 置换密码算法是不变化明文字符,而是按照某一规则重新排列消息中旳比特或字符次序,才而实现明文信息旳加密。
将明文中旳字母按照给定旳次序安排在一种矩阵中,然后用根据密钥提供旳次序重新组合矩阵中旳字母,从而形成密文。
其解密过程是根据密钥旳字母数作为列数,将密文按照列、行旳次序写出,再根据密钥给出旳矩阵置换产生新旳矩阵,从而恢复明文。
b) 置换密码(Permutation Cipher),又称换位密码。
算法实行时,明文旳字母保持相似,但次序会被打乱。
置换只不过是一种简朴旳换位,每个置换都可以用一种置换矩阵Ek来表达。
每个置换均有一种与之对应旳逆置换Dk。
置换密码旳特点是仅有一种发送方和接受方懂得旳加密置换(用于加密)及对应旳逆置换(用于解密)。
它是对明文L长字母组中旳字母位置进行重新排列,而每个字母自身并不变化。
c) 设n为一固定整数,P、C和K分别为明文空间、密文空间和密钥空间。
明/密文是长度为n旳字符序列,分别记为X(x1,x2,…,xn)属于P 和Y(y1,y2,…,yn)属于C ,K是定义在{1,2,…,n}旳所有置换构成旳集合。
对任何一种密钥(即一种置换),定义置换如下:加密置换为:解密置换为:上式中,是旳逆置换,密钥空间K旳大小为n!2) 算法参数置换密码算法重要有c、m、k、n四个参数。
c为密文,m是明文,k为密钥,n为模数。
3) 算法流程算法流程。
如图所示五、试验目旳:1)学习置换密码旳原理2)学习置换密码旳算法实现六、试验内容:1.在虚拟机上运行置换密码.exe可执行文献,根据提醒输入明文和密钥,同步检查输出旳解密后旳成果与否与明文一致。
2.学习掌握置换密码旳原理,并根据明文和密钥计算出对应旳加密文,并与程序输出旳成果进行比对,掌握其加密解密旳过程。
实验一 古典密码算法

实验一古典密码算法1、目的使学生认识理解古典密码算法:凯撒密码算法,维吉尼亚密码算法。
2、环境PC 1 台、安装软件VC60、JBuilder8、Delphi7。
3、预备知识1.凯撒密码的过程:表1:字母编码表再用配对字母取代信息里的原始字母位移加密法(shift cipher):模数计算。
E k(x)=(x+k)mod 26,D k(y)=(y –k)mod 26如:k=5;“hello world”加密为:mjqqt….2.维吉尼来密码维吉尼来方阵:(不区分大小写)数学表达式:=+C i P i K i[]([][])%26;验证:V[0,0]=0;V[25,25]=24V[13,12]=25解密:[]([][])%26;P i C i K i =-如:k=”BEST ”;“HELLO WORLD ”加密为:IIDE …. 4字符一组: hellOWOR LD BESTBEST BEST以第一行字母为列标,2行为行标(B ,H )=I ; 解密: IIDE BEST ,明文字母是B 行字母为I 的列号H ,或B 列=I 的行H 。
4、方法和步骤(1)请根据算法的描述和你对算法过程的理解,选用一种编程语言C ,C++,Java,Pascal 来实现凯撒算法,用自己学号的最后起之3位数为密钥,加密自己姓名的全拼,将解密,将密文为结果写于实验报告上。
(2)请根据算法的描述和你对算法过程的理解,选用一种编程语言C,C++,Java,Pascal来实现维吉尼亚算法,用“best”为密钥,加密自己姓名的全拼,将解密,将密文为结果写于实验报告上.附参考源程序:Vigenere.cpp.pdf5、注意算法要实现加密过程和解密过程并对正确性设计验证途径。
实验六 古典密码与破译

定义在 Z26上的方阵 A 模 26 可逆的充要条件是:
det(A) 不能被 2 和 13 整除
模 26 可逆
Z26 中具有模 26 倒数的整数及其模 26 倒数表2
a a-1 1 1 3 5 7 9 11 15 17 19 21 23 25 9 21 15 3 19 7 23 11 5 17 25
N O P Q R S T U V W X Y Z 14 15 16 17 18 19 20 21 22 23 24 25 0
Hill2 解密举例
① 将密文字母分组,通过查表列出每组字母对应的向量 ② 求出加密矩阵 A 的 模 26 逆矩阵
1 8 B 0 9
③ 用 B 左乘每组密文字母组成的向量,然后再反查字母
Hill2 加密举例
反查字母表值得每个向量对应的字母组为:
16 , 12
1 15 , , 12 20
20 20
PL
AL
OT
TT
HDSDSXX
Hill2 加密
K L M
PLALOTTT
A B C D E F G H I J
③ 令 = B mod(m) ,由 的分量反查字母表值表,
得到相应的明文字母
Hill2 解密举例
甲方收到乙方(己方)的一个密文信息,内容为: WKVACPEAOCIXGWIZUROQWAB ALOHDKCEAFCLWWCVLEMIMCC 按照甲方与乙方的约定,他们之间采用 Hill2密码,密钥 1 2 为 A ,字母表值见下表,问这段密文的原文 0 3 是什么? A 1 B 2 C 3 D 4 E 5 F 6 G 7 H 8 I 9 J K L M 10 11 12 13
古典密码的实验报告

古典密码的实验报告古典密码的实验报告引言:密码学作为一门古老而又神秘的学科,一直以来都吸引着人们的兴趣。
在古代,人们用各种各样的密码来保护重要信息的安全性。
本实验旨在通过实际操作,探索古典密码的加密原理和破解方法,从而深入了解密码学的基本概念和应用。
一、凯撒密码凯撒密码,又称移位密码,是最简单的一种古典密码。
其原理是通过将明文中的每个字母按照一定的规则进行移位,得到密文。
在本实验中,我们选择了一个简单的凯撒密码进行破解。
首先,我们选择了一段明文:“HELLO WORLD”,并将其按照凯撒密码的规则进行移位,假设移位数为3,则得到密文:“KHOOR ZRUOG”。
接下来,我们尝试使用暴力破解的方法来还原明文。
通过尝试不同的移位数,我们发现当移位数为3时,得到的明文与原文完全一致。
这表明我们成功地破解了凯撒密码,并还原了原始的明文。
二、维吉尼亚密码维吉尼亚密码是一种基于多个凯撒密码组合而成的密码算法。
其原理是通过使用不同的移位数对明文进行加密,从而增加了密码的复杂度。
在本实验中,我们选择了一段明文:“CRYPTOGRAPHY”,并使用维吉尼亚密码进行加密。
我们选择了一个关键词“KEY”作为加密密钥。
首先,我们将关键词“KEY”重复至与明文长度相同,得到“KEYKEYKEYKEYK”。
然后,将明文中的每个字母与关键词中对应位置的字母进行凯撒密码的移位操作。
经过加密后,我们得到了密文:“LXFOPVEFRNHR”。
接下来,我们尝试使用破解方法来还原明文。
通过尝试不同的关键词和移位数的组合,我们发现当关键词为“KEY”且移位数为3时,得到的明文与原文完全一致。
这表明我们成功地破解了维吉尼亚密码,并还原了原始的明文。
三、栅栏密码栅栏密码是一种基于换位操作的密码算法。
其原理是通过将明文中的字母按照一定的规则进行重新排列,得到密文。
在本实验中,我们选择了一段明文:“HELLO WORLD”,并使用栅栏密码进行加密。
古典算法加密实验报告

一、实验目的通过本次实验,掌握古典加密算法的基本原理和实现方法,加深对古典加密算法的理解,提高编程能力。
二、实验内容本次实验主要涉及以下古典加密算法:1. 仿射密码2. 单表代替密码3. 维吉尼亚密码三、实验原理1. 仿射密码仿射密码是一种单字母替换密码,其加密原理为将明文进行0~25字母编码,按照加密公式计算出密文对应位置的字母编码,最后从密文的字母编码还原出密文对应位置的字母。
解密原理与加密原理相反。
2. 单表代替密码单表代替密码的加密原理为利用代替表,将明文中的每个字符映射到密文。
解密原理为对代替表进行反向查找,由密文映射回明文。
3. 维吉尼亚密码维吉尼亚密码的加密原理为通过加密方程Ci = (pi k(i mod m)) mod 26,由明文得到密文。
解密原理为解密过程是加密过程的逆过程,通过解密方程pi = (Ci k(i mod m)) mod 26。
四、实验步骤1. 仿射密码(1)编写加密函数encrypt,输入明文和密钥a、b,输出密文。
(2)编写解密函数decrypt,输入密文和密钥a、b,输出明文。
(3)测试加密和解密函数,验证其正确性。
2. 单表代替密码(1)编写加密函数subencrypt,输入明文和代替表,输出密文。
(2)编写解密函数subdecrypt,输入密文和代替表,输出明文。
(3)测试加密和解密函数,验证其正确性。
3. 维吉尼亚密码(1)编写加密函数vigenereencrypt,输入明文和密钥,输出密文。
(2)编写解密函数vigeneredecrypt,输入密文和密钥,输出明文。
(3)测试加密和解密函数,验证其正确性。
五、实验结果与分析1. 仿射密码通过编写encrypt和解密函数,成功实现了仿射密码的加密和解密过程。
实验结果表明,加密和解密函数运行正常,能够正确转换明文和密文。
2. 单表代替密码通过编写subencrypt和解密函数,成功实现了单表代替密码的加密和解密过程。
实验02古典密码
一、实验室名称:网络工程实验室二、实验项目名称:古典密码实验三、实验学时:2学时四、实验原理:古典密码算法的基本原理(单表密码,多表密码,密码分析);五、实验目的:目的:实现密码算法(Hill密码,Vigenère密码)并掌握加密过程原理六、实验内容:a)Hill密码的基本原理希尔密码(Hill Password)是运用基本矩阵论原理的替换密码算法如下:1、假设要加密的明文是由26个字母组成,其他字符省略。
2、将每个字符与0-25的一个数字一一对应起来。
(例如:a/A—0,b/B—1,……z/Z—25)。
3、选择一个加密矩阵A,其中矩阵A必须是可逆(n*n)矩阵,例如4、将明文字母分别依照次序每n个一组(如果最后一组不足n个的话,就将其补成n个),依照字符与数字的对应关系得到明文矩阵ming 。
5、通过加密矩阵A,利用矩阵乘法得到密文矩阵mi = A*ming mod 26;6、将密文矩阵的数字与字符对应起来,得到密文。
7、解密时利用加密矩阵的逆矩阵A-1和密文,计算ming=A-1*mi mod 26,可得到明文核心代码:循环体外:String message = new String("helloworld");int len = message.length();char[] cipArray = new char[len];char[] messageArray = new char[len];循环处理中:a=message.charAt(i*2)-'a';b=message.charAt(i*2+1)-'a';temp1 = (a*encryptKey[0][0] + b*encryptKey[0][1])%26;if (temp1<0){temp1 = temp1 + 26;}temp2 = (a*encryptKey[1][0] + b*encryptKey[1][1])%26;if (temp2<0){temp2 =temp2 + 26;}cipArray[i*2] =(char) (temp1+97);cipArray[i*2+1] = (char)(temp2+97);解密算法略。
K_实验一 古典密码实验
实验一古典密码学若干算法实验名称:古典密码学若干算法实验类型: 验证性实验学时:4适用对象: 信息安全专业、计算机网络一、实验目的学习常见的古典密码学算法,通过编程实现替代密码算法和置换密码算法,加深对古典密码体制的了解,为深入学习密码学奠定基础,并学习到经典密码学算法中常见的一些方法和策略。
二、实验要求(1) 实现移位密码;(2) 实现替换密码;(3) 实现Vigenere密码(选做);(4) 实现置换密码(换位密码);(5) 对每一种密码,编写加密字符串和加密文件的两种算法并进行实验。
(5) 撰写规范的实验报告。
三、实验原理古典密码算法曾被广泛应用,大都比较简单,可使用手工和机械操作来实现加密和解密。
它的主要应用对象是文字信息,利用密码算法实现文字信息的加密和解密。
下面以两种常见的具有代表性的古典密码算法,以帮助读者对密码算法建立一个初步的印象。
(1)替代密码替代密码的原理是使用替代法进行加密,就是将明文由其它的字母、数字或符合所代替后形成密文。
这里每个明文字母对应的密文字母可能是一个,也可能是多个。
接收者对密文进行逆向替换即可得到明文。
替代密码典型的表现形式有:1)单表代替即简单替代密码或者称为单字母代替,明文字母表中的一个字符对应密文字母表中的一个字符。
这是所有加密中最简单的方法。
关键词加密法就是一种典型的单表代换方法。
它通过下述两步来构造(生成对应关系)。
这里以ASCII码-256个字母表为例:(1) 选择一个关键词,如果该关键词有重复的字母,去除第一次出现之外的所有相同的字母。
例如:关键词为:“This is the Key.”则使用:“This teKy.”。
(2)将该关键词写在字母表的下方,并用字母表的其他字母按标准的顺序写余下的空间。
例如:以下两个算法为根据关键词theKey,来生成上面的加密密钥 KEY,然后对相应的数据进行加密。
// KeyEncrypt.cpp : 定义控制台应用程序的入口点。
实验一古典密码算法
实验一古典密码加密算法【实验目的】一般的密码学实验要求学习者编写实现加密法或分析工具的程序,但这势必要占用学习者较多的时间去调试程序,减少真正学习密码学的时间。
分析加密程序CAP是一款密码加密与分析的软件,包含了古典密码学和现代密码学常用的密码算法和分析工具。
学习者可以利用CAP更好地学习加密和密码分析技术,而不必花费大量的时间调试程序。
b5E2RGbCAP【实验目的】1、理解代替密码学加密过程;2、掌握置换密码学加密过程;3、自行设计恺撒密码<Caesar Cipher )加密工具,并验证恺撒密码<Caesar Cipher )加密过程;p1EanqFDPw4、掌握经典加密分析软件CAP的使用并验证古典密码加密算法;【实验环境】1、基于Windows的PC机一台;设计设计恺撒密码<Caesar Cipher )加密工具时的软件环境根据学生自己选择的平台安装,本设计软件平台可以是C语言,Visual C++,Visual C#,Visual Basic均可,主要是实现恺撒密码<Caesar Cipher )算法即可。
DXDiTa9E3d2、CAP加密与分析软件【实验内容】1、以C#平台为例说明恺撒密码<Caesar Cipher )算法的实现。
程序主界面如图1所示:程序源码using System。
……(省略部分生成代码>namespace Encryption{publicpartialclassForm1 : Form{int key。
privatestring Encryption(int key,refstringInputString>RTCrpUDGiT{StringBuilder str = newStringBuilder(>。
char ch,chtemp。
int temp。
for(int i=0。
i<InputString.Length。
实验吧_密码学实验报告(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)测试加密和解密函数,验证其正确性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、实验背景与目的
通过实现简单的古典密码算法,理解密码学的相关概念如明文(plaintext)、密文(ciphertext)、加密密钥(encryption key)、解密密钥(decryption key)、加密算法(encryption algorithm)、解密算法(decryption algorithm)等。
二、实验环境
Visual C++6.0
三、实验内容
(1)用C\C++语言实现仿射变换(Affine)加/解密算法;2)
(2)用C\C++语言实现统计26个英文字母出现的频率的程序;
(3)利用仿射变换加/解密程序对一段较长的英文文章进行加密,再利用统计
软件对明文和密文中字母出现的频率进行统计并作对比,观察有什么规
律。
其中a, b为密钥,
25
,
0≤
≤b
a
,且gcd(a, 26)=1
实验要求:加/解密程序对任意满足条件的a、b都能够处理。
仿射变换:
加密:
()26
mod
,
b
am
m
E
c
b
a
+
=
=
解密:
()()26
mod
1
,
b
c
a
c
D
m
b
a
-
=
=-
四、实验原理
一个仿射变换对应于一个矩阵和一个向量的乘法,而仿射变换的复合对应于普通的矩阵乘法,只要加入一个额外的行到矩阵的底下,这一行全部是0除了最右边是一个1,而列向量的底下要加上一个1。
仿射变换原理在基于MQ问题的多变元公钥密码中,公钥一般是方程组,但是这种没有处理的方程组很容易受到插值法的攻击,例如:首先在q元有限域上选取个变量以及个变量。
构造方程组:这里面公钥信息方程组就是:其中是明文信息,而则是密文。
可以看出这样的公钥信息很容易受到插值法的攻击,下面使用仿射将
明文信息进行隐藏。
先选取一个可逆矩阵,然后进行以下变换:其中是一个可逆矩阵,这样变化以后就可以将转化成以为变量的方程组.
在加密解密程序中,需要对明文进行仿射变换,但是要对大小写做判断,并且处理空格,逗号,等特殊符号。
五、实验结果分析
如图为统计26个英文字母在文章中的概率
如图为加密解密算法
密文如下
六、实验心得
在第一次的密码学上机实验中,我见到并学到了一系列的密码学知识,同时也掌握了如何用不同的方法生成全排序。
在我们整个实验过程中,我体会到了许多,也学到了许多。
本次实验,我对擦靠的两个程序都做了大量分析,虽然中途也出了不少的问题,使用了
不正确的程序代码导致出现了很大的错误,甚至程序半天无法相应。
但最终都通过同学老的帮助得以解决,原因是我的随机函数多次被调用,导致程序变慢。
我希望以本次实验为一个新的起点,从一点一滴出发,认真扎实的学习基本密码学技术,逐渐培养自己的密码学技术能力,愈做愈好。
七、实验附件
//实验一:统计26个英文字母出现的频率的程序
#include<iostream>
#include<fstream> //引入文件流头文件
#include<vector> //引入向量
using namespace std;
void main()
{
ifstream in("a.txt");
vector<int> s;
vector<int> n(26,0);
for(int i=0;i<26;++i)
s.push_back(97+i); //将97+i依次推入N数组中
for(char x;in>>x; ) //依次读取文件中的内容到X
for(int i=0;i<26;++i)
if(int(x)==s[i]){ //进行判断
n[i]++;}
float sum=0; //注意不能是整型
for(int j=0;j<26;++j)
sum+=n[j]; //统计总字数
cout<<"统计结果如下:"<<endl;
for(int k=0;k<26;++k)
cout<<' '<<char(k+97)<<"出现的概率为:"<<n[k]/sum<<endl;
system("pause");
}
//实验二:用C\C++语言实现仿射变换(Affine)加/解密算法
//其中a, b为密钥,,且gcd(a, 26)=1,0<=a,b<=25
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
bool gcd(int a) //判断两个数是不是互素
{
int f=26,g,r;
g=a;
do{ //辗转相除法
r=f%g;
f=g;
g=r;
}while(r);
if(f==1)
return 1; //互素
else
return 0; //不互素
}
int inv(int a) //求逆元
{
int x,i;
for(i=1;i<=30;++i)
if((26*i+1)%a==0) //若满足26.(i)-1= 1 mod a 则逆元成立
{
x=(26*i+1)/a;
break;
}
return x;
}
void main()
{
L:
cout<<"/r/r欢迎进入仿射变换加/解密程序"<<endl
<<"0、加密"<<endl
<<"1、解密"<<endl;
int z;
cin>>z;
if(z==0||z==1)
{
cout<<"请输入密钥a和b:(注意:0<=a,b<=25且gcd(a, 26)=1)"<<endl; int a,b;
cin>>a>>b;
if((a<1||a>25)||(b<0||b>25))
cout<<"a,b的输入范围有错!"<<endl;
else
if(gcd(a)==0)
{
cout<<"密钥a有误,与26不互素"<<endl;
goto L;
}
else
{
if(z==0) //加密算法
{
ifstream in("a.txt");
ofstream out("b.txt");
vector<int> s;
for(char x;in>>x; ) //依次读取a.txt中的内容
s.push_back(int(x));
for(int i=0;i<s.size();++i)
{
s[i]=(a*(s[i]-97)+b)%26;
out<<char(s[i]+97);
}
out<<endl;
cout<<"加密成功!密文在‘b.txt’文件"<<endl;
}
else //解密算法
{
ifstream in("b.txt");
ofstream out("a.txt");
vector<int> s;
for(char x;in>>x;)
s.push_back(int(x));
for(int i=0;i<s.size();++i)
{
s[i]=inv(a)*(s[i]-97-b+26)%26;
out<<char(s[i]+97);
}out<<endl;cout<<"解密成功!明文在‘a.txt’文件"<<endl;
}
}
}
else
{
cout<<"所选操作无效!"<<endl;
goto L;
}
system("pause"); }。