传说凯撒曾用过保密的代码,今天称之为凯撒密文。英语字母表就是26个明文字母,最简单的加密形式就是用B代(凯撒密文的转换)

2023-03-04 5:35:41 密码用途 思思

标点符号没变,请注意。应该是Hello Caesar.How is your cipher?Stay away from the Senate today 。

解法:只需将上述的的密码每个字母往回推五位即可,即m往前推五位就是好,j往前推五位,以此类推,至于为什么要往回推五位,只能说这是试出来的。

这也叫N轮解密法,N就是解题的关键。

用C语言实现任意字符串的加密,其中,字母用凯撒加密方法加密,非字母不变

我尽量用注释阐述了思路,希望可以帮到你!!

#includestdio.h

#includestring.h

#define N 80 //可加密字符串最大长度

char plaintext[N]={0}; //明文,输入时输入字符,参与运算时强制转换成整数

int ciphertext[N]={0}; //密文,保存成整数,输出时强制转换成字符

int k; //后(右)移位数,相当于密钥

void getPlainText() //获得明文字符串

{

printf("请输入明文:");

scanf("%s",plaintext);

printf("\n");

}

void getLength() //获取后(右)移位数(密钥)

{

printf("请输入后移的位数:");

scanf("%d",k);

k%=26; //因为字母只有26个,所以超过26相当于重复

}

void Caesar_cipher() //凯撒加密,本程序采用的是字母循环后(右)移

{

unsigned int i;

for(i=0;istrlen(plaintext);i++)

{

//两个bool类型的变量是为了判断字符是否是字母(包括大写和小写)

bool flag1=plaintext[i]='a'plaintext[i]='z';

bool flag2=plaintext[i]='A'plaintext[i]='Z';

if(flag1||flag2){ //如果是字母,加密

ciphertext[i]=(int)plaintext[i]+k; //字母在字母表中后(右)移K位

if(ciphertext[i](int)'z'){ //保证是循环后(右)移

ciphertext[i]-=26;

}

}

else //非字母字符,不做处理,原样保存

ciphertext[i]=(int)plaintext[i];

}

}

void printCipherText() //输出加密后的密文

{

unsigned int i;

printf("\n加密后的密文是:");

for(i=0;istrlen(plaintext);i++) //把参与计算后是整数强制转换成对应的字符

printf("%c",(char)ciphertext[i]);

printf("\n");

}

void main()

{

getPlainText(); //明文

getLength(); //后(右)移位数

Caesar_cipher(); //凯撒加密

printCipherText(); //密文

}

4 16 15 8 19 2 21 22 13 2 21 10 16 15-1 凯撒密码是什么?

在密码学中,恺撒密码(英语:Caesar cipher),或称恺撒加密、恺撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。

(以上摘自百度百科,更多详情请自行学习了解)

然后这些数字,分别指代英文26个字母,比如4指代d,16指代p等等。以此类推,则除了“-1”以外的其他数字转换成字母依次是:dpohsbuvmbujpo

-1指的是偏移量为1,即明文中的所有字母分别向右偏移一位继而得到上述密文。因此若想得到明文,须将dpoh...的所有字母分别向左偏移一位,即d变成c,p变成o等等。以此类推,明文即是:

congratulation

祝贺

至于那个“-1”,个人猜想还有一种理解,就是指4 16……那些数字分别减去1。这样理解也能得出同一个答案,只是我不确定那个“-”究竟是减号还是普通的短破折号。

开源项目:凯撒密码转换器

几天前一次和朋友聊天谈到了加密聊天,于是想到了凯撒密码,随之就是想用自己的一点烂技术写点好玩的:

下面是成品说明

本程序可以将用户输入的内容通过 非固定的凯撒密码字典 进行加/解密,是一种好用加密的加密聊天方式。

Caesar cipher,发明者Caesar(凯撒),罗马人。

根据苏维托尼乌斯的记载,恺撒曾用此方法对重要的军事信息进行加密:

如果需要保密,信中便用暗号,也即是改变字母顺序,使局外人无法组成一个单词。如果想要读懂和理解它们的意思,得用第4个字母置换第一个字母,即以D代A,余此类推。

同样,奥古斯都也使用过类似方式,只不过他是把字母向右移动一位,而且末尾不折回。每当他用密语写作时,他都用B代表A,C代表B,其余的字母也依同样的规则;他用A代表Z。

另外,有证据表明,恺撒曾经使用过更为复杂的密码系统:文法学家普罗布斯曾经写过一份独具创新的手稿,研究恺撒书信中包含有秘密信息的字母。

已经无法弄清恺撒密码在当时有多大的效果,但是有理由相信它是安全的。因为恺撒大部分敌人都是目不识丁的,而其余的则可能将这些消息当作是某个未知的外语。即使有某个敌人获取了恺撒的加密信息,根据现有的记载,当时也没有任何技术能够解决这一最基本、最简单的替换密码。现存最早的破解方法记载在公元9世纪阿拉伯的阿尔·肯迪的有关发现频率分析的著作中。

这是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以罗马共和时期凯撒的名字命名的,当年凯撒曾用此方法与其将军们进行联系。

进入程序后,会有像下面这样的提示:

随便输入一段英文(此程序仅支持英文和数字,原因看原理):例如 Fuck you

然后回车:

我们在这输入的是可看的原文,所以我们要加密,输入1,回车:

我们以位移+3(这是当年的默认值,输入其他值可以为负,但是必须加负号,正数的正号加不加无所谓)为例,输入并回车:

程序里面用了循环,所以输出完后会自动进行下一次,这适合正在加密聊天的折腾者。

同样,我们把加密好的文本复制完后重新输入,选择2进行反加密(解密),位移了多少仍然填3:

这样解密就成功了,是不是真的很适合爱折腾的你?赶紧发给你的朋友,约定一个固定的位移数(加密密钥)进行愉快的无限制聊天吧!

存放主程序及图标文件

英文版主程序(在en-ww文件夹内)

程序图标,透明底的

中文版主程序

日志文件,主要通过自编模块 keeplog 生成,内容为“日期(Y/M/D)+时间(h/m/s)+加密密钥+输入/输出内容+分割线”