Advertisement

信息加密——古典密码学

阅读量:

信息加密——古典密码学

前言

使用'密码'或'加密系统'来进行'加密'操作。
原始的非加密数据被称为'明文'。
其对应的密文则被定义为'密文'。
通过'解密'这一过程,则可将密文恢复回原始明文。

在这里插入图片描述

古典密码算法曾经广泛应用于实际领域,并因其相对简单的特性而备受青睐,在加密与解密方面主要依赖于手工计算和机械装置完成操作。其核心处理对象主要是以文字形式存在的信息,并通过特定的密码算法对文本信息进行加密与解密操作。

一、替换(凯撒)密码

简单替换密码加密基于将每个当前字母替换成常规字母表中位于第n个位置之后的那个对应字符的方式实现。较为复杂的替换密码则通过创建一种更为细致的对应关系来实现加密过程,并因此能够生成更大的密钥空间。

代码如下:

复制代码
    #include "stdio.h" 
    #include "conio.h" 
    int main() 
    { 
    int k,i=0; 
    char a[100],b[100]={0},c[100]={0};
    /*
    	printf("请输入明文(小写字母):\n"); 
    gets(a); 
    printf("请输入加密密钥(1-25):\n"); 
    scanf("%d",&k); 
    do{       
        if((a[i]+k)>122)
            b[i]=(char)(a[i]+k-26); 
    		else 
    		    b[i]=(char)(a[i]+k);
        i++; 
    	}while(a[i]!='\0'); 
    	printf("密文为:\n"); 
    puts(b);
    */
    	//下面是解密部分
    	//printf("\n"); 
    //printf("请输入解密密钥(1-25):\n");
    	printf("请输入密文(小写字母):\n"); 
    gets(a); 
    for(k=1;k<=25;k++){
    	i=0;
    	do{       
        if((a[i]-k)<97)
            b[i]=(char)(a[i]-k+26); 
    		else 
    		    b[i]=(char)(a[i]-k);
        i++; 
    	}while(a[i]!='\0');
    	printf("解出明文为:\n"); 
    puts(b);
    }
    return 0;
    }

二.换位密码

该密码方案不对任何明文内容进行替换, 而是通过重新排列顺序的方式实现加密过程。其中一种典型的变体是双转置密码, 其基本工作流程是将原始信息组织到一个预设大小的二维表格中, 然后按照预先确定的行和列置换规则对整个数据框架进行重新排列以完成加密任务

1.简单换位(栅栏)密码

该类密码也被称为Columnar Transposition(列换位法),是一种传统的换位加密方法。其基本原理是将待加密的信息按照顺序分为上下两行交替排列,并通过特定规则对这两行进行组合处理以实现加密效果。具体而言,在实际应用中需先确定列宽参数并建立相应的排列结构,在完成上下文字体块的拼接后即可生成最终的一个密文段落。

代码如下:

复制代码
    #include "stdio.h" 
    #include "conio.h" 
    int main() 
    { 
    char a[100],b[100]={0},c[100]={0};
    printf("请输入明文(小写字母):\n"); 
    gets(a);
    int i=0,j=0,k=0;
    	do{       
        if(i%2==0){
        	b[j]=a[i];
        	j++;
    		} 
    		else{
    			c[k]=a[i];
    			k++;
    		}
        i++; 
    	}while(a[i]!='\0'); //当遇到字符串结束符号时循环结束
    	i=0;
    	while(c[i]!='\0'){
    		b[j]=c[i];
    		i++;
    		j++;
    	} 
    	printf("密文为:\n");  
    puts(b);//输出密文数组b
    printf("请输入密文(小写字母):\n"); 
    gets(a);
    int len;
    for(len=0;;len++) if(a[len]=='\0') break;
    j=0;
    	if(len%2==0) k=len/2;
    	else k=len/2+1;
    	for(i=0;i<len;i++)
    {
    	if(i%2==0){
    		b[i]=a[j];
    		j++;
    		}
    		else{
    			b[i]=a[k];
    			k++;
    		}
    	}
    puts(b);
    	return 0;
    }

2.猪圈密码

猪圈密码(Pigpen cipher)是一种以格子为基础的简单替换密码。

在这里插入图片描述

3.培根密码

培根密码(Baconian Cipher)是一种基于字母替换的密码学方法,在16世纪时期由英国哲学家兰西斯·培根(作为知识就是力量口号的代表者)发明。每一个明文字母都会被替换成一个长度为5的字符序列。

在这里插入图片描述

4.摩斯电码

摩尔斯电码自无线电发明以来就是最初采用的信息编码形式;它通过点和节的方式进行编码,并以节与节之间的间隔来传递信息。

在这里插入图片描述

5.当铺密码

历史上常采用汉字作为编码载体,在特定场景下用于对数字进行加密处理。这种编码方式无需使用解密钥匙即可实现信息保护功能,并将原始信息被巧妙地嵌入到加密后的数据流中。

5201314

在这里插入图片描述

6.键盘密码

基于 keyboard layout 的设计原理开发了一种密码机制。该方法主要包括两种类型:如笔记本电脑 keyboard 和触摸屏手机 keyboard。常见的加密方法包括行列坐标编码(行列法)和字母顺序编码(顺序码)。方案一采用字母顺序排列的方式;方案二通过行列位置将字母映射为数字编码;方案三采用类似 QWERTY 布局的数字编码系统。

在这里插入图片描述

7.与佛论禅

ILOVEYOU

在这里插入图片描述

全部评论 (0)

还没有任何评论哟~