C基础/PlayFair加密

浅析加密算法三【Playfair密码】 文章目录一、简介二、原理三、例题四、代码 一、简介 playfairplayfairplayfair 加密算法经莱昂·普莱费尔提倡在英国军地和政府使用。 它有一些不太明显的特征:密文的字母数一定是偶数;任意两个同组的字母都不会相同,如果出现这种字符必是乱码和虚码。 它使用方便而且可以让频度分析法变成瞎子,在 185418541854 到 185518551855 年的克里米亚战争和 189918991899 年的布尔战争中有广泛应用。但在 191519151915 年的一战中被破译了。 编写分三步: 1. 阅读详情

http://wenku.baidu.com/view/9a28a8070740be1e650e9a2a.html  第12题

//	playfair 加密
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#define x 50
char MiYao[x],PassWord[x],AddPass[x],Table[5][5],Map[25]; 
bool Visit[27]={false};
char English[27]="abcdefghijklmnopqrstuvwxyz";
void Input()
{
	printf("请输入密钥:\t");	scanf("%s",MiYao);
	printf("请输入待加密密码:\t");	scanf("%s",PassWord);
}
void Fun_5x5()
{
	int count = 0,V =0;
	/*标记密钥内字符为: true*/
	for(int i=0;MiYao[i]!='\0';i++)
		if(strchr(English,MiYao[i])!=NULL)
			Visit[strchr(English,MiYao[i])-English] = true;	
	/*执行密钥矩阵操作 并标记已使用字符:true*/					
	for(int i=0;i<5;i++)
		for(int j=0;j<5;j++)
		{
			if(count<strlen(MiYao))
				Table[i][j] = MiYao[count++];
			else
			{
				while(Visit[V] != false)	V++;
				Table[i][j] = English[V];	
				Visit[V++] = true;
			}
		}
		puts("∞∞∞密钥矩阵为∞∞∞");
		for(int i=0;i<5;i++)
		{	for(int j=0;j<5;j++)
				printf("%3c",Table[i][j]);
			puts("");
		}
		puts("∞∞∞∞∞∞∞∞∞∞∞"); 
			
}
int IsVisited(char ch)
{
	return Visit[strchr(English,ch)-English];	//false 未出现过 
}
void TabletoMap()
{	int count=0;
	for(int i=0;i<5;i++)
	for(int j=0;j<5;j++)
		Map[count++]=Table[i][j];
	Map[count]='\0';
}
void Judge()
{
	int len = strlen(PassWord),i,j,k;
	memset(AddPass,0,sizeof(char)); 
	/*一对对去字母,剩下单个字母,则不变化,直接放入加密串中.*/
	if(len%2){	
		AddPass[len-1] = PassWord[len-1];
		len -=1;
	}
	/*一对中 密钥矩阵中 存在矩阵 eg.ab 先输出a同行顶点在输出b同行顶点*/
	int row1,low1,row2,low2,a1,a2;
	for(i=0;i<len;i+=2)
	{
		char c1,c2;
		c1 = PassWord[i];
		c2 = PassWord[i+1];
		/*一对中 两字母相同 无变化*/
		/*一对中 有字母不在密钥矩阵中 无变化*/
		if(c1 == c2 || ( !IsVisited(c1)||!IsVisited(c2)))
		{	AddPass[i] = c1;
			AddPass[i+1]=c2;
		}else{
			a1 = strchr(Map,c1)-Map;
			row1 = a1/5;	low1 = a1%5;
			a2 = strchr(Map,c2)-Map;
			row2 = a2/5;	low2 = a2%5;
			/*一对中 字符出现在同行或同列 简单swap字符*/
			if(row1 == row2 || low1 == low2)
			{
				AddPass[i] = c2;
				AddPass[i+1] = c1;
			}else{
				AddPass[i] = Table[row1][low2];
				AddPass[i+1] = Table[row2][low1];	
			}	
		}
	}AddPass[len+1]='\0';
	puts("加密后字符串:"); 
	puts(AddPass);
	puts("原串是:");
	puts(PassWord); 
} 
int main()
{
	Input();
	Fun_5x5();
	TabletoMap();	
	Judge();
	return 0;
} 


java实现Playfair 密码 一种 Playfair 密码变种加密方法如下:首先选择一个密钥单词(称为 pair)(字母不重复,且都为小写字母), 然后与字母表中其他字母一起填入至一个 5x5 的方阵中,填入方法如下: 1.首先按行填入密钥串。 2.紧接其后,按字母序按行填入不在密钥串中的字母。 3.由于方阵中只有 25 个位置,最后剩下的那个字母则不需变换。 如果密钥为 youandme,则该方阵如下: y o u a n ... 阅读详情

相关推荐

第二届蓝桥杯C/C++组第十题 Playfair密码变种加密

一种Playfair密码变种加密方法如下:首先选择一个密钥单词(称为pair)(字母不重复,且都为小写字母),然后与字母表中其他字母一起填入至一个5x5的方阵中,填入方法如下: 1.首先按行填入密钥串。 2.紧接其后,按字母序按行填入不在密钥串中的字母。 3.由于方阵中只有25个位置,最后剩下的那个字母则不需变换。 如果密钥为youandme,则该方阵如下:  y o u a n

1589

实现Playfair密码,C语言

【代码】实现Playfair密码,C语言。

fighting_xr1的博客 650

用c++写的PlayFair密码的加密与解密算法

最近学习了密码学的PlayFair密码,于是我就用了C++语言将其写了出来,有些地方肯定用C语言里的数组只是更方便些,但是我为了巩固自己的C++知识,有些地方故意用了C++里面的东西,可能比较复杂!! #include #include #include #include

Sayid_Cslg的专栏 6034

Playfair加密算法(C 实现)

主要函数 1、Creat_Key(char* s,int L, char Matrix[5][5]) 生成密钥Matrix矩阵 2、Encrypt(char Matrix[5][5],int L, char* s, char *s0, bool reverse) 根据密钥矩阵加密或解密 加密:s为明文,s0为密文字符串存储位置,reverse=0 解密:s为密文,s0为明文字符串存储位置,reverse=1 注意事项 1、字符串只能含有字母 2、已禁用字母j/J 3、字符均以大写形式处理(已自动转换,输入时

dc12499574的博客 4623

Playfair加密方法与原理深入解析

在Playfair密码中,明文会被分割成字母对。如果原明文中出现同字母相邻的情况,比如"LL",则在它们之间插入一个特定的填充字符(如"X")。如果没有可用的字母对,就在最后一个字母对的末尾添加一个填充字符,确保所有明文都能被分为两字符的对。填充字符不一定是"X",还可以选择其他未在密钥表中出现的字母。选择何种填充字符需在加密和解密两端保持一致。在Playfair密码的上下文中,边缘字母指的是位于密钥表最外圈的字母。它们的处理方式尤其重要,因为它们可能会与其他字母形成跨边界的矩形。

weixin_42601547的博客 1025

掌握Playfair加密算法的VC实现

Playfair算法的原理基于一个5x5的字母矩阵,矩阵中的字母无重复且按照某种特定规则排列。明文通过这个矩阵转换为密文。基本的加密规则是将明文中的字符对进行分析,然后根据矩阵位置进行加密。每个字符对的两个字母在矩阵中的位置决定了加密的方式,可能包括替换、位移或保持不变。在Visual Studio C++(简称VC)环境中开发Playfair算法,需要进行以下配置:安装Visual Studio C++

weixin_42527589的博客 1113

playfair密码 C语言实现

这个学期学校开了应用密码学的课,老师布置的一个作业就是挑选一种置换或者代换密码然后用C语言实现。刚开始拿到组长分配的任务,觉得playfair很简单,完全可以一个小时搞定,可是真正动手去写,才发现这个算法的复杂。不是需要多么高深的算法技巧,但是对于明文的整理,生成5x5矩阵的过程,加密的分析,需要用到二维数组,动态内存,等等。关键是网上对于playfair密码的介绍实在是很少啊。(如果大家有好的网站

dlPtr的博客 1万+

Playfair密码算法的C语言实现与应用

Playfair密码算法是一种在19世纪末期由英国科学家查尔斯·惠斯通提出的经典加密方法,该算法的名称来源于当时的政治家、科学家和密码学先驱巴特勒·利斯·琼斯男爵(Frederick Charles Francis Abel),他后来被授予“Playfair”男爵称号。该加密算法使用一个5x5的字母矩阵来进行加密,通过替换和重排明文中的字母对来实现加密,相较于传统的单字母替换密码,如凯撒密码,它具有更高的安全性。5x5矩阵是Playfair密码算法的核心组件,用于替代传统的26字母表。

weixin_36474966的博客 1271

古典密码之一的Playfair密码的实现

古典密码之一的Playfair密码的实现

adcxhw的博客 5014

Playfair加密算法 C语言

C语言实现Playfair密码,在Windows平台的VC和Linux平台的gcc上均测试通过 C语言实现Playfair密码,在Windows平台的VC和Linux平台的gcc上均测试通过<<隐藏

playfair密码C语言实现

是我自己写的C语言算法,可以实现playfair加解密。 需要后续文档什么的可以找我,免费。 不过其实代码里面的注释完全可以帮助大家看懂了

PlayFair密码原理、代码

PlayFair密码原理、理论实现和代码实现

qq_44827634的博客 2万+

playfair 算法及其C语言模拟实现

playfair 算法及其C语言模拟实现

[古典密码]:PlayFair cipher(Playfair密码)

来源于我的博客 1.编制密码表  构造一个5*5的密码表,表格填充关键字(字母不重复),之后按字典序填充密码表中没有的字母,需要注意的是5*5表格只能放25个字母,剩下一个字母需要选择已经放入表的一个作为替代,这里习惯性将J省略,I/J共用。 以关键字为PLAYFAIR EXAMPLE为例 ​ P L A Y F I/J R E X

4338

playfair多码代换加密解密的C语言实现

这是一段c语言实现的playfair多码代换算法的简单程序。

play fair加密算法c++实现

密码学中play fair加密算法,用C++实现的,学密码学时可以参考这个或者实验参考学习

Playfair 加密

题目真的好长但是意思很简单 89.加密 (15分)C时间限制:3 毫秒 | C内存限制:3000 Kb题目内容:一种Playfair密码变种加密方法如下:首先选择一个密钥单词(称为pair)(字母不重复,且都为小写字母),然后与字母表中其他字母一起填入至一个5x5的方阵中,填入方法如下:1.首先按行填入密钥串。2.紧接其后,按字母序按行填入不在密钥串中的字母。3.由于方阵中只有25个位置,...

weixin_30645617的博客 422

playfair密码的C++实现的实验报告,及源码

该文件包含了playfair密码的详细实验报告,以及可以直接在DEV或VC++里面可以直接运行的代码

上一篇: C基础/指定长度的字符串排列问题
下一篇: Codeigniter + Mysql + php5.5
多格AI零代码
博客等级 码龄15年 40粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值