信息安全 实验五 古典密码算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验步骤:
(1)根据实验原理部分对替代密码算法的介绍,自己创建明文信息,并选择一个密钥, 编写替代密码算法的实现程序,实现加密和解密操作。 (2)根据实验原理部分对置换密码算法的介绍,自己创建明文信息,并选择一个密钥, 编写置换密码算法的实现程序,实现加密和解密操作。
实验结果:
1.替代算法 结果截图如下:
int len=strlen(str); int len1=strlen(a); int le=len1/len; char b[100][100]; char c[100][100]; char d[100][100]; int j=0; int t=0; int i; int x; for(i=0;a[i]!='\0';i++) {
c[x][i]=b[x][j]; } } } } for(i=0;i<len;i++) { for(j=0;j<len;j++) { if(str[i]==str1[j]) { for(x=0;x<j1;x++) {
d[x][i]=c[x][j]; } } } } cout<<"加密后的密文为:"<<endl; for(i=0;i<len;i++) { for(j=0;j<j1;j++) cout<<d[j][i]<<" "; } cout<<endl;
实验五 古典密码算法
实验目的:
通过编程实现替代密码算法和置换密码算法,加深对古典密码体制的了解,为深入学 习 密码学奠定基础。
实验环境:
运行 Windows 或 Linux 操作系统的 PC 机,具有 gcc(Linux)、VC(Windows)等 C 语言编 译环境。
实验原理:
古典密码算法曾被广泛应用,大都比较简单,使用手工和机械操作来实现加密和解密。 它的主要应用对象是文字信息,利用密码算法进行文字信息的加密和解密。下面介绍两种常 见的具有代表性的古典密码算法,以帮助读者对密码算法建立一个初步的印象。 1. 替代密码
根据上面的置换,将原有矩阵中的字母按照第 1 列、第 4 列、第 5 列、第 3 列、第 2 列、第 6 列的顺序排列、则有下面的形式: acattk bniegs avitfe 从而得到密文:abatgftetcnvaiikse 其解密的过程是根据密钥的字母数作为列数,将密文按照列、行的顺序写出,再根据由 密钥给出的矩阵置换产生新的矩阵,从而恢复明文。
加密截图
解密截图
部分代码如下: 加密函数
解密函数
2.置换算法 结果截图如下: 加密运行截图
解密运行截图
部分代码如下: 加密函数: void Enctr() {
char str[100]; char str1[100]; char a[100]; cout<<"请输入明文:"<<endl; cin.get(); cin.get(a,100); cout<<"请输入密钥:"<<endl; cin.get(); cin.get(str,100);
char ch=str1[j]; str1[j]=str1[j+1]; str1[j+1]=ch; } } } //cout<< str1<<" "; for(i=0;i<len;i++) { for(int j=0;j<len;j++) { if(str[i]==str1[j]) { for(int x=0;x<j1;x++) {
E(m)=(m+k) mod n 其中,m 为明文字母在字母表中的位置数;n 为字母表的字母个数;k 为密钥;E(m)为 密文字母在字母表中对应的位置数。 例如,对于明文字母 H,其在字母表中的位置数为 8,设 k=5,则按照上式计算出来的 密文为 L,计算过程如下:
E(8)=(m+k) mod n=(8+5) mod 26=13=I 2. 置换密码 置换密码算法的原理是不改变明文字符,只将字符在明文中的排列顺序改变,从而实现 明文信息的加密。置换密码有时又称为换位密码。 矩阵换位法是实现置换密码的一种常用方法。它将明文中的字母按照给定的顺序安排在 一个矩阵中,然后根据密钥提供的顺序重新组合矩阵中的字母,从而形成密文。例如,明文 为 attack begins at five,密钥为 cipher,将明文按照每行 6 个字母的形式排在矩阵中,形成 如 下形式: attack begins atfive 根据密钥 cipher 中各字母在字母表中出现的先后顺序,给定一个置换:
int len=strlen(str); char b[100][100]; char c[100][100]; char d[100][100]; int j=0; int t=0; int j1; int t1; int i; int x; for(i=0;a[i]!='\0';i++) {
if(a[i]!=' ') {
{ char ch=str1[j]; str1[j]=str1[j+1]; str1[j+1]=ch;
} } } for(i=0;i<len;i++) { for(j=0;j<len;j++) {
if(str[i]==str1[j]) {
for(x=0;x<le;x++) {
c[x][i]=b[x][j]; } } } } for(i=0;i<len;i++) { for(j=0;j<len;j++) { if(str[i]==str1[j]) { for(x=0;x<le;x++) {
} 解密函数: void Decrt() {
char str[100]; char str1[100]; char a[100]; cout<<"请输入密文:"<<endl; cin.get(); cin.get(a,100); cout<<"请输入密钥:"<<endl; cin.get(); cin.get(str,100);
d[x][i]=c[x][j]; } } } } cout<<"解密后的明文为:"<<endl; for(i=0;i<le;i++) { for(j=0;j<len;j++) cout<<d[i][j]<<" "; } cout<<endl; }
if(a[i]!=' '){ b[j][t]=a[i]; c[j][t]=a[i]; j++; if(j>=le) { j=0; t++; }
} else{}; } strcpy(str1,str); for(i=0;i<len;i++) { for(j=0;j<len-i-1;j++) {
if(str1[j]>str1[j+1])
b[j][t]=a[i]; c[j][t]=a[i]; t++; if(t>=len) {
t=0; j++; } j1=j; t1=t; } else{}; } strcpy(str1,str); for(i=0;i<len;i++) {
for(j=0;j<len-i-1;j++) {
if(strwenku.baidu.com[j]>str1[j+1]) {
替代密码算法的原理是使用替代法进行加密,就是将文中的字符用其它字符替代后形成 密文。例如,明文字母 a、b、c、d,用 D、E、F、G 做对应替换后形成密文。 替代密码包括多种类型,如单表替代密码、多明码替代密码、多字母替代密码、多表替 代密码等。下面我们介绍一种典型的单表替代密码——凯撒(Caesar)密码,又叫循环移位 密码。它的加密方法就是将文中的每个字母用此字符在字母表中后面第 K 个字母替代。它 的加密过程可以表示为下面的函数:
相关文档
最新文档