凯撒加密与矩阵换位加密

原创 2012年03月28日 22:04:20

今天做加密算法实验,设计两个古典加密的算法,小case啦,
矩阵换位加密对字符串操作高一点,花的时间也久一点,然后贴代码
/////////////////////////凯撒加密
#include "stdio.h"
#include "string.h"
void E(char * c)
{
int k=20;
int temp=*c, jishu;


if(temp>='a' && temp<='z')
{
jishu='a';
temp-='a';
}
else if(temp>='A' && temp<='Z')
{
jishu='A';
temp-='A';
}

temp=(temp+k)%26;
*c=(char)(temp+jishu);
}


int main()
{
int i;
char str[50];
printf("请输入要加密的明文  ");
gets(str);
printf("加密后的密文为  ");
for(i=0; i<strlen(str); i++)
{
if(str[i]>='0' && str[i]<='9')
continue;
else
{
E(&str[i]);
}


}
puts(str);
//printf("\n");
return 0;
}
////////////////////矩阵换位加密
#include "stdio.h"
#include "string.h"


void en(char * strmingwen,  char (* strmiwen)[20], char * strmiyao, int miyaolen);


int main()
{
char strmingwen[200],strmiyao[20],strmiwen[20][20];
int len;


printf("请输入明文 ");
gets(strmingwen);
printf("请输入密钥 ");
gets(strmiyao);

//strcpy(strmingwen,"attackbeginsatfive");
//strcpy(strmiyao,"cipher");
len=strlen(strmiyao);
en(strmingwen, &strmiwen[0], strmiyao, len);



return 0;
}






void en(char * strmingwen,  char (* strmiwen)[20], char * strmiyao, int miyaolen)
{
int i, j, a[20], xiabiao=0, hang=0;//数组a存密钥中字母出现的先后顺序,取值从0开始
char strtemp[20], strmingwenjuzhen[20][20], ctemp;


for(i=0; i<20; i++)//循环strmiyao数组下标
{
for(j=0; j<20; j++)//循环strtemp数组下标
{
strmiwen[i][j]='0';
}
}
//////////////////////////////////////////////处理明文为矩阵
for(i=0;  xiabiao<strlen(strmingwen); i++)
{
for(j=0; j<miyaolen && xiabiao<strlen(strmingwen); j++)
{
strmingwenjuzhen[i][j]=strmingwen[xiabiao];
xiabiao++;
}
hang++;
}


////////////////////////////////////////处理密钥
strcpy(strtemp, strmiyao);
for(i=0; i<miyaolen; i++)//strtemp升序排序
{
for(j=i+1; j<miyaolen; j++)
{
if(strtemp[i]>strtemp[j])
{
ctemp=strtemp[i];
strtemp[i]=strtemp[j];
strtemp[j]=ctemp;
}

}
}



for(i=0; i<miyaolen; i++)//循环strmiyao数组下标
{
for(j=0; j<miyaolen; j++)//循环strtemp数组下标
{
if(strmiyao[i] == strtemp[j])
{
a[i]=j;//把下标存入a数组,即strmiyao[i]在strmiyao数组中的升序排序序号
break;
}
}
}





//////////////////////////////////加密
for(i=0; i<hang; i++)//i为行循环 把mingwen按a数组的顺序加密存入miwen中
{
for(j=0; j<miyaolen; j++)
{
strmiwen[ i ][ a[j] ]= strmingwenjuzhen[ i ][ j ];//循环strmiwenjuzhen,按a[j]顺序存入strmiwen
}

}
///////////////////////////////////////////////////////
for(j=0; j<miyaolen; j++)//输出
{
for(i=0; i<hang; i++)
{
if(strmiwen[ i ][ j ] >= 'a' &&  strmiwen[ i ][ j ] <= 'z')
{
printf("%c",strmiwen[ i ][ j ]);
}
}

}
printf("\n");

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

IDF实验室:百密一疏--凯撒加密

地址: ctf.idf.cn/index.php?g=game&m=list&a=index&id=19 题目: 凯撒加密的 大概就是这样吧,不能告诉你再多了。。 U8Y...
  • Shinukami
  • Shinukami
  • 2015年06月05日 00:07
  • 6249

经典加密算法凯撒密码、维吉尼亚密码,RSA算法加密的简单学习

凯撒密码—-已知的最早的代换密码 —-对字母表中的每个字母,用它之后的第3(或者第n)个字母来代换明文:a b c d e f g h i j k l m n o p q r s t ...
  • Gxiaoqin
  • Gxiaoqin
  • 2016年12月09日 20:49
  • 4697

python对凯撒密码的实现

凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换...
  • lu_yongchao
  • lu_yongchao
  • 2016年12月07日 12:58
  • 4099

信息安全_置换加密算法_矩阵换位加…

【题意描述】 置换密码算法的原理是不改变明文字符,而是按照某一规则重新排列消息中的比特或字符顺序,才而实现明文信息的加密。置换密码有时又称为换位密码。 矩阵换位法是实现置换密码的一种常用方法。它将...
  • CHINAonlyQiu
  • CHINAonlyQiu
  • 2013年08月23日 15:08
  • 1574

凯撒加密与解密及其python代码的实现

凯撒加密 凯撒加密通过移位的方式加密消息,最多有25种加密方式(最开始是24种,因为当时的字母一共是25个) 比如明文‘ i love china’移位2位加密后的暗文就是‘k nqxg ejkpc...
  • by4_Luminous
  • by4_Luminous
  • 2016年11月25日 23:22
  • 3387

队列的应用--凯撒加密法

凯撒加密法简介 凯撒加密(Caesar cipher)是一种简单的消息编码方式:它根据字母表将消息中的每个字母移动常量位k。举个例子如果k等于3,则在编码后的消息中,每个字母都会向前移动3位:a会被替...
  • qq_29013473
  • qq_29013473
  • 2016年11月27日 10:03
  • 800

个人写的凯撒密码,加密解密

/* 凯撒密码加密 And 解密 * 功能不算完善,只能正方向加密和反方向解密 * 也可以用加密,解密互逆的方式来进行明文反方向加密。 */ //#include //之前使用getchar()...
  • skyoojaa
  • skyoojaa
  • 2012年05月30日 22:38
  • 634

【城会玩系列】哈理工oj 1423 nyzbfg cevzr【凯撒加密】

哈理工oj 1423 ,hrbust 1423
  • mengxiang000000
  • mengxiang000000
  • 2016年03月18日 14:28
  • 490

加密与解密(凯撒密码与栅栏密码)

密码学之凯撒密码与栅栏密码,鱼C工作室这一系列教程,从古至今基本上知名的算法都会讲解。涉及一些高等数学方面的内容,虽然数学从来没及格过,但觉得挺有意思的,看了讲义貌似也还可以接收,先啃啃看。    ...
  • Cloudkings
  • Cloudkings
  • 2015年12月04日 21:47
  • 6677

凯撒密码,简单的加密

介绍:有一个全部为大写的字符串,现在给其设置一个规定,每个字符转换成它后面的的第五个字符。 例如A->F Z->E 思考:1.对该字符进行遍历,根据字母的ASCII码来进行判断 2.A的ASCII码为...
  • normal_people
  • normal_people
  • 2017年04月13日 18:46
  • 189
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:凯撒加密与矩阵换位加密
举报原因:
原因补充:

(最多只允许输入30个字)