凯撒密码

凯撒密码,第1张

我觉得创建26个文件实在太冗杂了。其实一个就够了,因为随着你的选择的改变(比如以9为加密条件,所有字母循环后移9位),目标文件里面的内容就自动更新了。

当然你也可以使用函数 int create(char filename , int mode) 在执行框里手动输入像 e:\\originaltxt 这样的地址字符,但你想象一下,这是不是很麻烦?

在实际加密中,可使用随机函数 rand()产生循环后移位数,而且完全可以不限制在26位,扩展ASCII码可以产生成千上万的字符,将文件加密到那些几乎无规律,难以识别的字符上,安全性就提高了许多。当然还有什么多轮加密之类的。可以自己慢慢摸索,挺有趣的。祝你好运!

修改如下(已成功执行):

#include<stdioh>

#include<stdlibh>

char encrypt(char ch,int n)/加密函数,把字符向右循环移位n/

{

while(ch>='A'&&ch<='Z')

{

return ('A'+(ch-'A'+n)%26);

}

while(ch>='a'&&ch<='z')

{

return ('a'+(ch-'a'+n)%26);

}

return ch;

}

void main()

{

FILE in,out;

char ch1,ch2;

int i;

printf("Please input the number(1~26) you want to use for encrypt:");

scanf("%d",&i);

if((in=fopen("e:\\originaltxt","r"))==NULL) /文件名根据自己建立的位置修改,

我建在e盘的根目录下

{

printf("Can not open this file!\n");

exit(0);

}

if((out=fopen("e:\\encrypttxt","w"))==NULL) //同上

{

printf("Can not open this file!\n");

exit(0);

}

while(!feof(in)){

if((ch1=fgetc(in))!=EOF)

ch2=encrypt(ch1,i);

fputc(ch2,out);

}

printf("Encrypt is over!\n");

fclose(in);

fclose(out);

}

直接把每个字母往后推三位

出来的就是密文了

明文:COMPUTERSYSTEM

密文:FRPSXWHUVBVWHP

而解密时 只需要把密文每个字母前推3位(推三位这是标准的凯撒密码 加密时不一定推三位 这时只要统计各字母出现的频率便很容易解开)

欢迎分享,转载请注明来源:浪漫分享网

原文地址:https://hunlipic.com/langman/478948.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存