求解凯撒密码算法的题目

求解凯撒密码算法的题目,第1张

C的编程思路,其它的语言不会

1,用for循环,实现一维数组a【】,从第一个输入到第六个字母,然后再用for循环把a【】从0到5都减29,赋值到b【】,把数组b以字符变量输出

2,同理,把密文加29,然后以字符变量输出

具体程序不难,我这里没有c编译软件。。。。。

密码学中,恺撒密码(或称恺撒加密、恺撒变换、变换加密)是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。

恺撒密码的加密、解密方法还能够通过同余的数学方法进行计算。首先将字母用数字代替,A=0,B=1,...,Z=25。此时偏移量为n的加密方法即为: E(x) = (x + n) mod 26.

解密就是:

D(x) = (x - n) mod 26.

显而易见,一旦确定了某两个字母的对应关系(即n的值),这种移位密码很容易被破解。

因此,为了使密码有更高的安全性,单字母替换密码就出现了。

明码表:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

密码表:T U V W X Y Z A B C D E F G H I J K L M N O P Q R S

但是这种加密方式依然可以破解,根据字母使用频度表,分析密文中的字母频率,将其对照即可破解。

不仅如此,凯撒加密对加密数据也是有要求的,一般情况下,它只支持对基本的英文字母进行加密,如果对中文等亚太地区的文字进行加密,结果可想而知,你的隐私将毫无保留的出现在众人面前。有人说,我们可以扩展这个算法,使它支持所有的文字,这么做是可行的,如果采用同余式的方式实现,代码几乎不怎么需要改动,只要字符集本身是Unicode就可以了。但是这种加密的安全性很难满足应用的要求。如果采用单字母替换的方式,程序将需要构建两个巨大的字符数组去保存他们的映射关系,而且扩展性也不好,当然也是不可行的。这样看来,凯撒加密岂不是一无是处了,其实对于一般的应用,凯撒加密还是足以应付的,只要我们对它稍作改进。

写的一般般,希望对LZ有所帮助

#include <stdio.h>

#include <string.h>

int main()

{

char str[201]//存放字符

char tmp[11]//临时变量

int i//循环变量

int len//存放消息长度

scanf("%s",tmp)//这里输入START,开始

getchar()//接收回车

while(strcmp(tmp,"ENDOFINPUT"))

{

gets(str)//由于输入中有空格,所以用gets输入

getchar()//接收回车

len = strlen(str)

for(i=0i<leni++)

{

if(str[i]>='A'&&str[i]<='Z')

{

str[i] -= 5

if(str[i] <65)

{

str[i] +=26

}

}

}

scanf("%s",tmp)//这里输入END,结束

printf("%s\n",str)//处理完就直接输出结果

scanf("%s",tmp)//输入START表示继续,输入ENDOFINPUT则表示最后一个数据集

getchar()//接收回车

}

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12050922.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存