凯撒密码程序设计题(为什么等额本息还款金额会不一样)

2023-03-02 6:26:57 摩斯密码知识 思思

凯撒密码,要求C语言编写,求救!

写的一般般,希望对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=0;ilen;i++)

{

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;

}

凯撒密码用C++编写

#include stdio.h

#include stdlib.h

#include string.h

const int MAX_N=200;

int main(int argc, char *argv[])

{

int i,j,p;

char text[MAX_N];

char alphabet[30];

char op[10];

while(1)

{

printf("1---输入密码表 2---退出\n");

gets(op);

if(strcmp(op,"1")==0)

{

printf("密码表:");

gets(alphabet);

while(1)

{

printf("1---加密 2---解密 3---返回\n");

gets(op);

if(strcmp(op,"1")==0 ||strcmp(op,"2")==0 )

{

printf("输入文本:");

gets(text);

for(i=0;text[i]!='\0';i++)

{

if((text[i]='a'text[i]='z') || (text[i]='A'text[i]='Z') )

{

if(strcmp(op,"1")==0)

{

p=text[i]='a'? (text[i]-'a'):(text[i]-'A');

text[i]=text[i]+ alphabet[p]-(p+'A');

}

else

{

for(j=0;;j++)

if(alphabet[j]==text[i]||alphabet[j]==(text[i]-('a'-'A')))

break;

text[i]= text[i]='a' ? (j+'a') :(j+'A');

}

}

}//for(i)

if(strcmp(op,"1")==0)

printf("加密后的文本为:" );

else

printf("解密后的文本为:");

printf("%s\n\n",text);

}

else if(strcmp(op,"3")==0)

{

printf("\n");

break;

}

else

{

printf("选择有误!请重新选择!\n");

}

}//while(1)

}

else if(strcmp(op,"2")==0)

{

exit(1);

}

else

{

printf("选择有误!请重新选择!\n");

}

}

return 0;

}

/*

输入样例

QWERTYUIOPASDFGHJKLZXCVBNM

Welcome to ZZSY2009!

输出样例

Vtsegdt zg MMLN2009!

*/

凯撒密码程序设计题(为什么等额本息还款金额会不一样) 第1张

python凯撒密码实现

# codinng=utf-8

x = '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'.split(' ')

y = 'n o p q r s t u v w x y z a b c d e f g h i j k l m'.split(' ')

X = map(lambda x: x.upper(), x)

Y = map(lambda x: x.upper(), y)

dict_kaisa = dict(zip(x + X, y + Y))  # 创建一个字典, 键为原字符串, 值为加密字符串

# 定义凯撒加密函数, 输入字符串, 输出凯撒加密后字符串

def kaisa(string):

    result = []

    for i in range(len(string)):

        if string[i] in dict_kaisa.keys():

            result.append(dict_kaisa[string[i]])

        else:

            result.append(string[i])

    return ''.join(result)

print(kaisa('The Zen of Python'))  # 结果为Gur Mra bs Clguba

凯撒密码为一种替换密码,此题的加密过程为先进行base64编码,再进行移

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

恺撒密码的加密、解密方法还能够通过同余的数学方法进行计算。首先将字母用数字代替,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就可以了。但是这种加密的安全性很难满足应用的要求。如果采用单字母替换的方式,程序将需要构建两个巨大的字符数组去保存他们的映射关系,而且扩展性也不好,当然也是不可行的。这样看来,凯撒加密岂不是一无是处了,其实对于一般的应用,凯撒加密还是足以应付的,只要我们对它稍作改进。