- 1、本文档共16页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验报告_密码学
信息安全实验报告
学 号:
学生姓名:
:
通过编程实现替代密码算法和置换密码算法,加深对古典密码体制的了解,为深入学习密码学奠定基础。
编译环境
运行 windows 或 linux 操作系统的 PC 机,具有 gcc(linux)、VC(windows)等 C语言编译环境。
实验原理
古典密码算法历史上曾被广泛应用,大都比较简单,使用手工和机械操作来实现加密和解密。它的主要应用对象是文字信息,利用密码算法实现文字信息的加密和解密。下面介绍两种常见的具有代表性的古典密码算法,以帮助读者对密码算法建立一个初步的印象。
1. 替代密码
替代密码算法的原理是使用替代法进行加密,就是将明文中的字符用其它字符替代后形成密文。例如:明文字母 a、b、c、d ,用 D、E、F、G做对应替换后形成密文。
替代密码包括多种类型,如单表替代密码、多明码替代密码、多字母替代密码、多表替代密码等。下面我们介绍一种典型的单表替代密码,恺撒(caesar)密码,又叫循环移位密码。它的加密方法,就是将明文中的每个字母用此字符在字母表中后面第 k个字母替代。它的加密过程可以表示为下面的函数:
E(m)=(m+k) mod n
其中:m 为明文字母在字母表中的位置数;n 为字母表中的字母个数;k 为密钥;E(m)为密文字母在字母表中对应的位置数。 例如,对于明文字母 H,其在字母表中的位置数为 8,设 k=4,则按照上式计算出来的密文为 L:
E(8) = (m+k) mod n = (8+4) mod 26 = 12 = L
2. 置换密码
置换密码算法的原理是不改变明文字符,只将字符在明文中的排列顺序改变,从而实现明文信息的加密。置换密码有时又称为换位密码。
矩阵换位法是实现置换密码的一种常用方法。它将明文中的字母按照给的顺序安排在一个矩阵中,然后用根据密钥提供的顺序重新组合矩阵中字母,从而形成密文。例如,明文为 attack begins at five,密钥为 cipher,将明文按照每行 6 列的形式排在矩阵中,形成如下形式:
a t t a c k
b e g i n s
a t f i v e
根据密钥 cipher中各字母在字母表中出现的先后顺序,给定一个置换:
1 2 3 4 5 6
f =
1 4 5 3 2 6
根据上面的置换,将原有矩阵中的字母按照第 1 列,第 4 列,第 5 列,第 3 列,第 2列,第 6 列的顺序排列,则有下面形式:
a a c t t k
b i n g e s
a I v f t e
从而得到密文:abatgftetcnvaiikse
其解密的过程是根据密钥的字母数作为列数,将密文按照列、行的顺序写出,再根据由密钥给出的矩阵置换产生新的矩阵,从而恢复明文。
实验内容和步骤
1、根据实验原理部分对替代密码算法的介绍,自己创建明文信息,并选择
一个密钥 k,编写替代密码算法的实现程序,实现加密和解密操作。
2、根据实验原理部分对置换密码算法的介绍,自己创建明文信息,并选择
一个密钥,编写置换密码算法的实现程序,实现加密和解密操作。
总结与思考
记录程序调试过程中出现的问题,分析其原因并找出解决方法。记录最终实现的程序执行结果。
思考采取什么样的手段来防范类似对网络的攻击。
实验结果
替换密码的加密解密
先是加密
实现程序为:
#include stdio.h
#include conio.h
main()
{
int k,i=0;
char a[100],b[100]={0};;
printf(please input your ming wen:\n);
gets(a);
printf(please input mi shi \n);
scanf(%d,k);
printf(\n);
do{
b[i]=(char)(a[i]+k);
if(b[i]122){
b[i]=(char)(b[i]-26);
}
i++;
}while(a[i]!=\0);
puts(b);
getch();
}
实验结果为:
再是解密:
实现程序为:
#include stdio.h
#include conio.h
main()
{
int k,i=0;
char a[100],b[100];
printf(please input mi wen: \n);
gets(a);
printf(please input mi shi: \n);
scanf(
文档评论(0)