密码学入门6(维吉尼亚密码)
- 格式:pptx
- 大小:2.06 MB
- 文档页数:20
ctf密码学题目【原创实用版】目录1.CTF 密码学题目概述2.CTF 密码学题目的常见类型3.CTF 密码学题目的解密技巧4.总结正文一、CTF 密码学题目概述CTF(Capture The Flag)是一种网络安全技能竞赛,旨在通过解决各种技术难题来检验参赛者的能力。
在 CTF 中,密码学题目是重要的组成部分,它要求参赛者运用密码学知识来解密各种编码信息。
这类题目不仅考验参赛者的智力,还需要他们具备一定的密码学和编程基础。
二、CTF 密码学题目的常见类型1.凯撒密码:是一种最简单的加密方法,通过将明文中的每个字符都用按字母表顺序右移或左移一定的位数来加密。
2.维吉尼亚密码:是一种多字母替换密码,明文中的每个字符都由一个固定长度的密钥中的某个字母替换。
3.希尔密码:是一种基于矩阵的替换密码,明文中的每个字符都由一个固定的矩阵中的元素替换。
4.RSA 密码:是一种非对称加密算法,需要解密者知道公钥和私钥,才能进行解密。
5.哈希函数:如 MD5、SHA-1 等,这类题目通常要求参赛者通过碰撞攻击等方法找到一个特定的哈希值。
三、CTF 密码学题目的解密技巧1.对明文进行分析:观察明文是否有规律,如字母、数字、特殊符号的分布等。
2.尝试常见的加密方法:根据明文的特点,尝试使用常见的加密方法进行解密。
3.利用密码学工具:如 John the Ripper 等密码破解工具,可帮助参赛者快速破解一些复杂的密码。
4.寻找题目的提示:部分题目会在题目描述或输入输出中提供解密的线索,注意挖掘这些信息。
5.学习密码学知识:掌握密码学的基本原理和方法,能够帮助参赛者在面对复杂题目时游刃有余。
四、总结CTF 密码学题目是 CTF 竞赛中富有挑战性的一部分,它要求参赛者具备一定的密码学知识和编程能力。
维吉尼亚(Vigenere)密码算法(Javascript实现加密与解密) 传统加密技术对于当今的⽹络安全发挥不了⼤作⽤,但每⼀本讲述密码学的书的开头都会率先介绍它们,因为它们是密码学的基础,是密码学的历史。
Vigenere密码就是⼀种传统加密技术,它是多表代换密码,能够有效改进单表代换密码的词频分布特征问题。
详细介绍请参考密码学相关书籍。
⼏乎每⼀本密码学的书在讲述Vigenere密码的章节都会有这么⼀个《Vigenere代换表》⽤户讲解Vigenere密码机制:A B C D E F G H I J K L M N O P Q R S T U V W X Y ZB C D E F G H I J K L M N O P Q R S T U V W X Y Z AC D E F G H I J K L M N O P Q R S T U V W X Y Z A BD E F G H I J K L M N O P Q R S T U V W X Y Z A B CE F G H I J K L M N O P Q R S T U V W X Y Z A B C DF G H I J K L M N O P Q R S T U V W X Y Z A B C D EG H I J K L M N O P Q R S T U V W X Y Z A B C D E FH I J K L M N O P Q R S T U V W X Y Z A B C D E F GI J K L M N O P Q R S T U V W X Y Z A B C D E F G HJ K L M N O P Q R S T U V W X Y Z A B C D E F G H IK L M N O P Q R S T U V W X Y Z A B C D E F G H I JL M N O P Q R S T U V W X Y Z A B C D E F G H I J KM N O P Q R S T U V W X Y Z A B C D E F G H I J K LN O P Q R S T U V W X Y Z A B C D E F G H I J K L MO P Q R S T U V W X Y Z A B C D E F G H I J K L M NP Q R S T U V W X Y Z A B C D E F G H I J K L M N OQ R S T U V W X Y Z A B C D E F G H I J K L M N O PR S T U V W X Y Z A B C D E F G H I J K L M N O P QS T U V W X Y Z A B C D E F G H I J K L M N O P Q RT U V W X Y Z A B C D E F G H I J K L M N O P Q R SU V W X Y Z A B C D E F G H I J K L M N O P Q R S TV W X Y Z A B C D E F G H I J K L M N O P Q R S T UW X Y Z A B C D E F G H I J K L M N O P Q R S T U VX Y Z A B C D E F G H I J K L M N O P Q R S T U V WY Z A B C D E F G H I J K L M N O P Q R S T U V W XZ A B C D E F G H I J K L M N O P Q R S T U V W X Y 加密过程很简单,就是给定密钥字母x和明⽂字母y,密⽂字母是位于x⾏和y列的那个字母。
密码学常识□秋雨灰灰目录密码常识字母表顺序-数字进制转换密码Mod算法倒序间隔字母频率凯撒密码(Caesar Shifts, Simple Shift)凯撒移位(中文版)栅栏密码(The Rail-Fence Cipher)维吉尼亚密码(Vigenère Cipher)Polybius密码(Polybius Cipher)ADFGX/ADFGVX密码(ADFGX/ADFGVX Cipher)ADFGXADFGVX乘法密码(Multiplication Cipher)仿射密码(Affine Shift)希尔密码(Hill Cipher)加密解密Playfair密码(Playfair Cipher)莫尔斯电码置换密码(Transposition Cipher)替代密码(Monoalphabetic Substitution)字母表数字字母表代码反字母表随机乱序字母棋盘密码键盘密码键盘移位软键盘密码数字小键盘密码手机键盘密码数字记忆编码百度/Google/网页字符百度字符(GB2312)Google字符(URI)网页编码(Unicode)Alt+数字小键盘MD5【密码常识】字母表顺序-数字加密的时候,经常要把A至Z这26个字母转换成数字,最常见的一种方法就是取字母表中的数字序号。
A代表1,B代表2,C代表3……字母 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z数字 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26进制转换密码例如二进制:1110 10101 1101 10 101 10010 1111 1110 101转为十进制:14 21 13 2 5 18 15 14 5对应字母表:numberMod算法我们可以对字母序号进行数学运算,然后把所得的结果作为密文。
1、字母频率分析法对(单表代换密码)算法最有效。
2、(希尔密码)算法抵抗频率分析攻击能力最强,而对已知明文攻击最弱。
3、重合指数法对(多表代换密码)算法的破解最有效。
4、维吉利亚密码是古典密码体制比较有代表性的一种密码,其密码体制采用的是(多表代换密码)。
期中考试1.公钥密码体制与对称密码体制相比有什么有点和不足?优点:密钥的分发相对容易;密钥管理简单;可以有效地实现数字签名。
缺点:与对称密码体制相比,费对称密码体制加解密速度比较慢;同等安全强度下,费对称密码体制要求的密钥位数要多一些;密文的长度往往大于明文长度。
2. 简述单表代换和多表代换密码的基本思想及其优缺点。
答:单表代换密码是指明文消息中相同的字母,在加密时都使用同意固定的字母来代换。
单表代替的优缺点优点: 明文字符的形态一般将面目全非缺点:(A) 明文的位置不变; (B) 明文字符相同,则密文字符也相同; 从而导致在密文字符的统计规律之中.形态变但位置不变单表代换即使有大量的密钥,也不能提供足够的安全性,因为密文中残留了大量的明文结构。
多表代换密码是以一系列代换表依次对明文消息的字母序列代换的加密方法即明文消息中出现的同一个字母,在加密时不是完全被同一固定的字母代换,而是根据其出现的位置次序用不同的字母代换。
优缺点:优点:同一字母在明文序列的位置不同就具有不同的密文,从而可以更好地抵抗统计密码分析;缺点:周期性的多表代换密码降低了安全性.3. .简述DES与AES的异同:相似之处:二者的轮函数都是由3层构成,非线性层,线性混合层,子密钥异或,只是顺序不同;AES的子密钥异或对应于DES中S盒之前的子密钥异或;AES的列混合运算的目的是让不同的字节相互影响,而DES中的F函数的输出与左边的一半数据相加也有类似的效果;AES的非线性运算是字节代换,对应于DES中唯一的非线性运算S盒:行移位运算保证了每一行的字节不仅仅影响其他行对应的字节,而且影响其他行所有的字节,这与DES中置换P相似。
陈家琪网络安全技术-第2章密码学方法10加密解密明文密文原始明文密钥密钥明文密文Ø明文(Plaintext ):消息的初始形式;Ø密文(CypherText ):加密后的形式Ø记:明文记为P陈家琪网络安全技术-第2章密码学方法19•英文字母E 是使用最多的字母•然后是T、R、N、I、O、A、S •其它字母的使用比较少•使用最少的J、K、Q、X、Z转轮密码-密码机使密码分析变得极SIGABA陈家琪网络安全技术-第2章密码学方法28陈家琪网络安全技术-第2章密码学方法陈家琪网络安全技术-第2章密码学方法DES 加密算法的一般描述交换左右32比特逆置换IP -1置换IP子密钥56bit 密钥64bit 密文64bit 明文初始置换IP 和初始逆置换IP -1预输出作为输入置换置换陈家琪网络安全技术-第2章MIP(M)=(m 58 ,m 50 ,…)=(m'1 ,m'陈家琪网络安全技术-第2章密码学方法多重DES -两重DES双重DES 加密逻辑双重DES 解密逻辑陈家琪网络安全技术-第2章密码学方法45加密逻辑解密逻辑陈家琪网络安全技术-第2章密码学方法51Ø公钥私钥陈家琪网络安全技术-第2章密码学方法53公钥私钥单向陷门函数Ø单向函数1.给定x ,计算y=f(x) 是容易的;2.给定y , 计算x= f -1(y) 是不可行的(困难)。
Ø单向陷门函数•如果存在辅助信息k ,使得计算x= f -1(y) 又变得容易。
k 被称为陷门信息。
网络安全技术-第2章密码学方法和密钥(d)。
利用VC++6.0实现核心算法,如网络安全技术-第2章密码学方法网络安全技术-第2章密码学方法RSA 算法的程序实现击按钮“产生RSA 密钥对”,在出现的对产生素数p 和素数q ,如果产生100位长度的p 约分别需要10秒左右,产生的素数如图所示。
陈家琪网络安全技术-第2章密码学方法网络安全技术-第RSA算法的程序实现Ø在主界面选择一个文件,并导入“模n.txt ”文件到RSA 模文本框,导入“私密.txt ”文件或者“公密.txt ”,加密如果用“私密.txt ”,那么解密的过程就用“公密.txt ”。
【密码常识】字母表顺序-数字加密的时候,经常要把A~Z这26个字母转换成数字,最常见的一种方法就是取字母表中的数字序号。
A代表1,B代表2,C代表3...字母 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z数字 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2 0 21 22 23 24 25 26进制转换密码例如二进制:1110 10101 1101 10 101 10010 1111 1110 101转为十进制:14 21 13 2 5 18 15 14 5对应字母表:numberMod算法我们可以对字母序号进行数学运算,然后把所得的结果作为密文。
当运算结果大于26或小于1的时候,我们希望把这个数值转为1~26的范围,那么取这个数除以26的余数即可。
Mod就是求余数的运算符,有时也用“%”表示。
例如29 Mod 26 = 3,或写成2 9 % 26 = 3,意思是29除以26的余数是3。
倒序加密时为经常要对字符进行倒序处理。
如果让你按abcdef...的顺序背出字母表的每个字母会很容易,但是如果是zyxwvu...的顺序那就很难背出来了。
一个很熟悉的单词,如果按相反的顺序拼写,可能就会感到很陌生。
例如“love”字母倒过来拼就是“evol”。
具体加密时倒序有很多种方案,需要灵活运用。
例如:每个单词的倒序:siht si a tset - this is a test整句的倒序:tset a si siht - this is a test数字的倒序:02 50 91 02 - 20 05 19 20(test)间隔单词之间的间隔一般使用空格。
在加密时常常要去掉空格,但有时某些字母或数字来替代空格也不失为一种好的加密方案。
错误空格位置也会起到很强的误导作用。
例如:t hi sis at est - this is a test字母频率频率分析法可以有效的破解单字母替换密码。
罗马复兴密码1. 简介罗马复兴是欧洲历史上的一个重要时期,大约持续了从14世纪末到17世纪初的时间段。
在这个时期,欧洲文艺复兴和科学技术的发展达到了顶峰。
然而,除了文艺和科学方面的成就,罗马复兴还涉及到了一种神秘的艺术——密码学。
在这篇文章中,我们将探索罗马复兴时期的密码学和一些经典的密码方法。
2. 罗马复兴时期的密码学在罗马复兴时期,密码学不仅仅是供情报部门使用的工具,它也成为了贵族们用来保护其通信和私人信息的一种方法。
在这个时期,一些重要的密码学家开始提出各种各样的密码算法。
2.1 凯撒密码凯撒密码是罗马复兴时期最著名的密码算法之一。
它是由凯撒大帝(Julius Caesar)在他的军队中使用的。
这种密码的原理很简单,就是将明文的每一个字母按照字母表向后移动固定的位数。
例如,当移动位数为3时,字母A就变成了D,字母B变成了E,以此类推。
2.2 维吉尼亚密码维吉尼亚密码是由16世纪的英格兰女王伊丽莎白一世(Queen Elizabeth I)使用的密码算法。
这种密码使用了多个凯撒密码的变种,每个字母都按照不同的移动位数进行加密,从而增强了密码的复杂性。
3. 其他罗马复兴时期的密码方法除了凯撒密码和维吉尼亚密码之外,还有一些其他在罗马复兴时期广泛使用的密码方法。
3.1 栅栏密码栅栏密码是一种简单的置换密码,它是通过将明文进行纵向分组,然后按照一定规律排列,最后将其按行读取来加密的。
这种密码方法的优点是简单易用,但其加密强度相对较低。
3.2 美玲密码美玲密码是由意大利学者加斯帕·美玲(Giovan Battista Bellaso)在16世纪发明的一种密码方法。
它是一种多字母替换密码,使用了多个随机的密码字母表,并将明文中的每个字母替换为对应密码字母表中的字母。
4. 罗马复兴密码的破译虽然罗马复兴时期的密码方法在当时是相当先进的,但一些密码学家和破译者仍然成功地破解了这些密码。
最著名的例子是破译维吉尼亚密码的英国密码学家查尔斯·巴贝奇(Charles Babbage)。
CTF常见密码和编码总结密码学1.维吉尼亚密码:在凯撒密码基础上的一种变体,只不过对于每个明文字母来说秘钥长度可能是不一样的2.费纳姆密码:采用二进制表示,加密时要将明文和秘钥都转换成7位二进制数,异或得到密文。
解密将密文7个为一组,然后与秘钥异或,再讲结果转换成ascii3.列置换加密:将明文按行填写在一个矩阵,然后按照预定的顺序按列读取得到密文。
列置换的秘钥通常会以一个单词的形式给出,如nice(相当于4312)按照每个字符在字母表中出现的前后顺序来排列。
秘钥有几位数解密采用的矩阵就是几列,加密时首先去除铭文中的空格,然后依次填入一个4列的矩阵的,最后一行不足的部分可以留空(或用@等符号补全),按照秘钥的顺序一次读取4.Polybius(波利比奥斯密码):又称棋盘密码。
将给定的密文加密为两两组合的数字。
比如,HELLO加密后是23 15 31 31 34补充ADFGX密码:可以看做是Polybius的升级版,用ADFGX代换了五个数字5.Brainfuck它是一种极小化的计算机语言,按照"Turing complete(完整图灵机) "思想设计的语言,它的主要设计思路是:用最小的概念实现一种“简单”的语言,只有八种符号,所有的操作都由这八种符号> < + - . , [ ] 的组合来完成。
6.二进制幂数加密:由于英文字母只有26个字母,由公式可知,只要2的0、1、2、3、4、5次幂就可以表示31个单元。
通过用二进制幂数表示字母序号数来加密。
4=2^2 所以D加密过之后是2;15=2^0+2^1+2^2+2^3所以O加密后是01237.仿射加密:仿射加密则是将铭文与密钥的一部分相乘然后加上密钥的另一部分。
为便于计算将26个英文字母用数字表示:a=0,b=1.....z=25密钥有两个:a和b,取值范围是[0,25]。
要求a和26互质。
比如x是明文y是密文,加密公式是y=(ax+b)mod26.a=7,b=3假设明文为c,x=2,y=17,密文就是r8.培根密码:是一种简单的替换密码,密文字符只有两个:a,b;每个明文资福都会被替换成为一个有a,b组成的长度为5的字符串。
第3章密码学基础●密码学的基本概念和术语●对称和非对称密码的区别●古典密码学的基本方法掌握DES算法、AES算法RSA算法的基本原理3.1 密码学概述3.1.1 密码学的发展史恺撒(Caesar)密码维吉尼亚密码(Vigenere cypher)“恩格玛(Enigma)”密码机DES(数据加密标准)公开密钥密码量子密码学密码学的发展史大体上可以归结为三个阶段•第一阶段:1949年之前,密码学还不是科学,而是艺术。
•第二阶段:1949~1975年,密码学成为科学。
•第三阶段:1976年以后,密码学的新方向——公钥密码学。
•通常一个密码体制可以表达为一个五元组(M,C,K,E,D ),其中:•(1)M 是可能明文的有限集称为明文空间•(2)C 是可能密文的有限集称为密文空间•(3)K 是一切可能密钥构成的有限集称为密钥空间•(4)对于密钥空间的任一密钥有一个加密算法和相应的解密算法使得E k :M->C 和D k :C->M分别为加密和解密函数,且满足D k (E k (M))=M。
3.1.3密码的分类•1、按应用的技术或历史发展阶段划分:•2、按保密程度划分:•3、按密钥方式划分:•4、按明文形态:•5、按编制原理划分:3.1.4 近代加密技术1、对称加密算法对称加密算法(synmetric algorithm),也称为传统密码算法,其加密密钥与解密密钥相同或很容易相互推算出来,因此也称之为秘密密钥算法或单钥算法。
对称算法分为两类,一类称为序列密码算法(stream cipher),另一种称为分组密码算法(blockcipher)。
对称加密算法的主要优点是运算速度快,硬件容易实现;其缺点是密钥的分发与管理比较困难,特别是当通信的人数增加时,密钥数目急剧膨胀。
2、非对称加密体制•非对称加密算法(Asynmetric Algorithm)也称公开密钥算法(Public Key Algorithm)。
目录1.古典密码学 (1)2.加解密原理 (1)3.RSA算法 (8)4.密码体系 (9)5.Diffie-Hellman密钥交换 (11)6.生日攻击 (14)7.Hash函数 (15)8.数字签名 (17)9.密钥分发与管理 (19)10.身份认证 (23)密码学复习参考指南1.古典密码学古典密码学主要有两大基本方法①代替密码:就是将明文的字符替换为密文中的另一种的字符,接收者只要对密文做反向替换就可以恢复出明文。
②置换密码(又称易位密码):明文的字母保持相同,但顺序被打乱了。
以下是几种简单的古典密码学:(1)滚桶密码(2)掩格密码(3)棋盘密码(4)凯撒密码(Caesar)(5)圆盘密码(6)维吉尼亚密码(Vigenere)2.加解密原理①简述DES或者AES的加密解密过程,可用图形表示。
DES加密流程首先要生成一套加密密钥,从用户处取得一个64位长的密码口令,然后通过等分.移位.选取和迭代形成一套16个加密密钥,分别供每一轮运算中使用。
DES对64位(bit)的明文分组M进行操作,M经过一个初始置换IP,置换成m0。
将m0明文分成左半部分和右半部分m0 = (L0,R0),各32位长。
然后进行16轮完全相同的运算(迭代),这些运算被称为函数f,在每一轮运算过程中数据与相应的密钥结合。
在每一轮中,密钥位移位,然后再从密钥的56位中选出48位。
通过一个扩展置换将数据的右半部分扩展成48位,并通过一个异或操作替代成新的48位数据,再将其压缩置换成32位。
这四步运算构成了函数f。
然后,通过另一个异或运算,函数f的输出与左半部分结合,其结果成为新的右半部分,原来的右半部分成为新的左半部分。
将该操作重复16次。
经过16轮迭代后,左,右半部分合在一起经过一个末置换(数据整理),这样就完成了加密过程。
加密流程如图所示。
DES解密过程在了解了加密过程中所有的代替.置换.异或和循环迭代之后,读者也许会认为,解密算法应该是加密的逆运算,与加密算法完全不同。
维吉利亚密码维吉利亚(Vigenere)密码Vigenere是法国的密码学专家,Vigenere密码是以他的名字命名的。
该密码体制有一个参数n,在加密解密时,把英文字母用数字代替进行运算,并按n个字母一组进行变换。
明文空间、密文空间及密钥空间都是长度为n 的英文字母串的集合,因此可表示为P=C=K=(Z26)n。
加密变换如下: 设密钥k=(k1,k2,…,k n),明文P=(m1,m2,…,m n),加密函数为e k(P)=(c1,c2,…,c n), 其中c i=(m i+k i) (mod 26),i=1,2,…,n。
对密文c=(c1,c2,…,c n),密钥k=(k1,k2,…,k n),解密变换为d k(c)=(m1,m2,…,m n),其中m i=(c i-k i) (mod 26),i=1,2,…,n。
【例题】:设n=6,密钥是cipher,这相应于密钥k=(2,8,15,7,4,17),明文是“this cryptosystem is not secure”,试用Vigenere密码对其加密。
解:首先将明文按每6个分为一组,然后与密钥进行模26相加得t h i s c r19 7 8 18 2 172 8 15 7 4 1721 15 23 25 6 8V P X Z G Iy p t o s y24 15 19 14 18 242 8 15 7 4 170 23 8 21 22 15A X I V W Ps t e m i s18 19 4 12 8 182 8 15 7 4 1720 1 19 19 12 9U B T T M Jn o t s e c13 14 19 18 4 22 8 15 7 4 1715 22 8 25 8 19P W I Z I Tu r e20 17 42 8 1522 25 19W Z T相应的密文是“VPXZGI AXIVWP UBTTMJ PWIZIT WZT”。
一、实验目的1. 理解密码学的基本概念和原理。
2. 掌握常见的加密算法和解密算法。
3. 熟悉密码学的实际应用。
4. 培养实际操作能力和问题解决能力。
二、实验内容1. 古典密码学(1)单表替换密码实验内容:使用单表替换密码对一段明文进行加密和解密。
实验步骤:1)创建一个字符替换表;2)将明文中的每个字符替换为替换表中的对应字符;3)将替换后的字符拼接成密文;4)使用相同的替换表将密文解密,还原为明文。
(2)维吉尼亚密码实验内容:使用维吉尼亚密码对一段明文进行加密和解密。
实验步骤:1)确定密钥;2)按照密钥的长度将明文分成多个部分;3)对每个部分使用单表替换密码进行加密;4)将加密后的部分拼接成密文;5)使用相同的密钥和解密步骤将密文解密,还原为明文。
2. 现代密码学(1)DES加密算法实验内容:使用DES加密算法对一段明文进行加密和解密。
实验步骤:1)生成DES密钥;2)将明文分割成64位的数据块;3)对每个数据块进行加密,得到密文;4)使用相同的密钥和解密步骤将密文解密,还原为明文。
(2)AES加密算法实验内容:使用AES加密算法对一段明文进行加密和解密。
实验步骤:1)生成AES密钥;2)将明文分割成128位的数据块;3)对每个数据块进行加密,得到密文;4)使用相同的密钥和解密步骤将密文解密,还原为明文。
三、实验结果与分析1. 古典密码学实验结果单表替换密码和维吉尼亚密码的加密和解密效果良好,能够成功将明文加密为密文,再解密为明文。
2. 现代密码学实验结果DES和AES加密算法的加密和解密效果良好,能够成功将明文加密为密文,再解密为明文。
四、实验总结1. 通过本次实验,掌握了密码学的基本概念和原理。
2. 熟悉了常见的加密算法和解密算法,包括古典密码学和现代密码学。
3. 提高了实际操作能力和问题解决能力。
五、实验拓展1. 研究不同加密算法的优缺点,了解其在实际应用中的适用场景。
2. 学习更多密码学相关知识,如量子密码学、区块链密码学等。
1.凯撒密码的加解密源代码:#include<stdafx.h>#include <stdio.h>#include <string.h>int main(){char s[100],c;int i,p,d,e;printf("请选择: A.加密B.解密Q.退出\n"); scanf("%c",&c);if(c=='a'||c=='A'){printf("输入明文:");scanf("%s",&s);p=strlen(s);printf("请设置偏移量:");scanf("%d",&d);for(i=0;i<p;i++){if(s[i]>='a' && s[i]<='z')s[i]=(s[i]-'a'+d)%26+'a';else if(s[i]>='A' && s[i]<='Z')s[i]=(s[i]-'A'+d)%26+'A';else s[i]=s[i]+d;}printf("%s",s);printf("\n\n\n");}if(c=='b'||c=='B'){printf("请输入密文:");scanf("%s",&s);p=strlen(s);printf("请输入加密的偏移变量:");scanf("%d",&d);for(i=0;i<p;i++){if(s[i]>='a' && s[i]<='z'){e=s[i]-'a'-d;if(e<=0)s[i]=(e+26)%26+'a';else s[i]=e%26+'a';}else if(s[i]>='A' && s[i]<='Z'){e=s[i]-'A'-d;if(e<0)s[i]=(e+26)%26+'A';else s[i]=e%26+'A';}else s[i]=s[i]-d;}printf("%s",s);printf("\n\n");}if(c=='q'||c=='Q')return 0;return 0;}运行结果是:2.维吉尼亚密码的加解密源代码:#include "stdafx.h"#include<iostream>using namespace std;#define MINCHAR 32#define CHARSUM 94char table[CHARSUM][CHARSUM];bool Init();bool Encode(char* key, char* source, char* dest);bool Dncode(char* key, char* source, char* dest);int main(){if(!Init()){cout << "初始化错误!" << endl;return 1;}char key[256];char str1[256];char str2[256];int operation;while(1){do{cout << "请选择一个操作:1. 加密;2. 解密;-1. 退出\n"; cin >> operation;}while(operation != -1 && operation != 1 && operation != 2);if(operation == -1)return 0;else if(operation == 1)//加密{cout << "请输入密钥:";cin >> key;cout << "请输入待加密字符串:";cin >> str1;Encode(key, str1, str2);cout << "加密后的字符串:" << str2 << endl;}else if(operation == 2)//解密{cout << "请输入密钥:";cin >> key;cout << "请输入待解密字符串:";cin >> str1;Dncode(key, str1, str2);cout << "解密后的字符串:" << str2 << endl;}cout << endl;}return 0;}// 初始化维吉尼亚方阵bool Init(){int i, j;for(i = 0; i < CHARSUM; i++){for(j = 0; j < CHARSUM; j++){table[i][j] = MINCHAR + (i + j) % CHARSUM;}}return true;}// 加密// key:密钥// source:待加密的字符串// dest:经过加密后的字符串bool Encode(char* key, char* source, char* dest){char* tempSource = source;char* tempKey = key;char* tempDest = dest;do{*tempDest = table[(*tempKey) - MINCHAR][(*tempSource) - MINCHAR]; tempDest++;if(!(*(++tempKey)))tempKey = key;}while(*tempSource++);dest[strlen(source)] = 0;return true;}// 解密// key:密钥// source:待解密的字符串// dest:经过解密后的字符串bool Dncode(char* key, char* source, char* dest){char* tempSource = source;char* tempKey = key;char* tempDest = dest;char offset;do{offset = (*tempSource) - (*tempKey);offset = offset >= 0 ? offset : offset + CHARSUM; *tempDest = MINCHAR + offset;tempDest++;if(!(*(++tempKey)))tempKey = key;}while(*++tempSource);dest[strlen(source)] = 0;return true;}运行结果如下:。
2.1维吉尼亚密码
先用一个例子来说明维吉尼亚密码(以下简称维密)的加密过程:
用一个单词或一段英文作为密钥,在这里我们选取单词back。
如果要加密的明文是hello world,将每一位明文与密钥对应:
明文:h e l l o w o r l d
密钥:b a c k b a c k b a
可以看出当密钥的长度短于明文时,要将密钥重复使用。
每一位的加密过程与凯撒密码类似,我们将a~z的值定为0~25,加密就是将每一位明文值与密钥值相加。
例如h的值是7,b 的值是1,相加后得到8,所以密文的第一个字母是i。
以此类推,可以得到最后的密文为ienvp wqbmd。
加密过程可以写成一个式子:ci = (pi + ki) mod 26
是不是看上去跟广义的凯撒密码很像?ci表示第i位密文字母,pi表示第i位明文字母,ki 表示第i位密钥字母。
维密与凯撒密码的区别在于明文改变的值不是固定的,例如上例中第一个字母h增大了1位,第二个字母保持不变,第三个字母l增大了2位。
我们使用维密的时候,可以用计算机加密得到密文,也可以对较短的明文使用查表法。