恺撒密码

恺撒密码,第1张

“恺撒密码”据传是古罗马恺撒大帝用来保护重要军情的加密系统。它是一种替代密码,通过将字母按顺序推后起3位起到加密作用,如将字母A换作字母D,将字母B换作字母E。据说恺撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码。

假如有这样一条指令:

RETURN TO ROME

用恺撒密码加密后就成为:

UHWXUA WR URPH

如果这份指令被敌方截获,也将不会泄密,因为字面上看不出任何意义。

这种加密方法还可以依据移位的不同产生新的变化,如将每个字母左19位,就产生这样一个明密对照表:

明: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

在这个加密表下,明文与密文的对照关系就变成:

明文:THE FAULT, DEAR BRUTUS, LIES NOT IN OUR STARS BUT IN OURSELVES

密文:MAX YTNEM, WXTK UKNMNL, EBXL GHM BG HNK LMTKL UNM BG HNKLXEOXL

很明显,这种密码的密度是很低的,只需简单地统计字频就可以破译。于是人们在单一恺撒密码的基础上扩展出多表密码,称为“维吉尼亚”密码。它是由16世纪法国亨利三世王朝的布莱瑟·维吉尼亚发明的,其特点是将26个恺撒密表合成一个,见下表:

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

A 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

B 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 A CC D E F G H I J K L M N O P Q R S T U V W X Y Z A B

D D E F G H I J K L M N O P Q R S T U V W X Y Z A B C E E F G H I J K L M N O P Q R S T U V W X Y Z A B C D F F G H I J K L M N O P Q R S T U V W X Y Z A B C D E G G H I J K L M N O P Q R S T U V W X Y Z A B C D E F H H I J K L M N O P Q R S T U V W X Y Z A B C D E F G I I J K L M N O P Q R S T U V W X Y Z A B C D E F G H J J K L M N O P Q R S T U V W X Y Z A B C D E F G H I K K L M N O P Q R S T U V W X Y Z A B C D E F G H I J L L M N O P Q R S T U V W X Y Z A B C D E F G H I J K M M 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 N 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 O 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 N P P Q R S T U V W X Y Z A B C D E F G H I J K L M N O Q Q R S T U V W X Y Z A B C D E F G H I J K L M N O P R R S T U V W X Y Z A B C D E F G H I J K L M N O P Q S S 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 T 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 U 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 T V V W X Y Z A B C D E F G H I J K L M N O P Q R S T U

W W X Y Z A B C D E F G H I J K L M N O P Q R S T U V X X Y Z A B C D E F G H I J K L M N O P Q R S T U V W Y Y Z A B C D E F G H I J K L M N O P Q R S T U V W X Z Z 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

维吉尼亚密码引入了“密钥”的概念,即根据密钥来决定用哪一行的密表来进行替换,以此来对抗字频统计。假如以上面第一行代表明文字母,左面第一列代表密钥字母,对如下明文加密:

TO BE OR NOT TO BE THAT IS THE QUESTION

当选定RELATIONS作为密钥时,加密过程是:明文一个字母为T,第一个密钥字母为R,因此可以找到在R行中代替T的为K,依此类推,得出对应关系如下:

密钥:RELAT IONSR ELATI ONSRE LATIO NSREL

明文:TOBEO RNOTT OBETH ATIST HEQUE STION

密文:KSMEH ZBBLK SMEMP OGAJX SEJCS FLZSY

历史上以维吉尼亚密表为基础又演变出很多种加密方法,其基本元素无非是密表与密钥,并一直沿用到二战以后的初级电子密码机上。

=====别过滤,以下字母是对密码的研究!!!=====

KHILY LZA ZBHL XBPZXBL MVYABUHL HWWPBZ JSHBKPBZ

LIJMZ MAB ACIM YCQAYCM NWZBCVIM IXXQCA KTICLQCA

MJKNA NBC BDJN ZDRBZDN OXACDWJN JYYRDB LUJDMRDB

NKLOB OCD CEKO AESCAEO PYBDEXKO KZZSEC MVKENSEC

OLMPC PDE DFLP BFTDBFP QZCEFYLP LAATFD NWLFOTFD

PMNQD QEF EGMQ CGUECGQ RADFGZMQ MBBUGE OXMGPUGE

QNORE RFG FHNR DHVFDHR SBEGHANR NCCVHF PYNHQVHF

ROPSF SGH GIOS EIWGEIS TCFHIBOS ODDWIG QZOIRWIG

SPQTG THI HJPT FJXHFJT UDGIJCPT PEEXJH RAPJSXJH

TQRUH UIJ IKQU GKYIGKU VEHJKDQU QFFYKI SBQKTYKI

URSVI VJK JLRV HLZJHLV WFIKLERV RGGZLJ TCRLUZLJ

VSTWJ WKL KMSW IMAKIMW XGJLMFSW SHHAMK UDSMVAMK

WTUXK XLM LNTX JNBLJNX YHKMNGTX TIIBNL VETNWBNL

XUVYL YMN MOUY KOCMKOY ZILNOHUY UJJCOM WFUOXCOM

YVWZM ZNO NPVZ LPDNLPZ AJMOPIVZ VKKDPN XGVPYDPN

ZWXAN AOP OQWA MQEOMQA BKNPQJWA WLLEQO YHWQZEQO

AXYBO BPQ PRXB NRFPNRB CLOQRKXB XMMFRP ZIXRAFRP

BYZCP CQR QSYC OSGQOSC DMPRSLYC YNNGSQ AJYSBGSQ

CZADQ DRS RTZD PTHRPTD ENQSTMZD ZOOHTR BKZTCHTR

DABER EST SUAE QUISQUE FORTUNAE APPIUS CLAUDIUS

EBCFS FTU TVBF RVJTRVF GPSUVOBF BQQJVT DMBVEJVT

FCDGT GUV UWCG SWKUSWG HQTVWPCG CRRKWU ENCWFKWU

GDEHU HVW VXDH TXLVTXH IRUWXQDH DSSLXV FODXGLXV

HEFIV IWX WYEI UYMWUYI JSVXYREI ETTMYW GPEYHMYW

IFGJW JXY XZFJ VZNXVZJ KTWYZSFJ FUUNZX HQFZINZX

JGHKX KYZ YAGK WAOYWAK LUXZATGK GVVOAY IRGAJOAY

KHILY LZA ZBHL XBPZXBL MVYABUHL HWWPBZ JSHBKPBZ

回:如果这真的是恺撒移位密码的话,以上是我编程计算26次求出的结果,上面的26行文字包括了所有的字母轮换映射关系(就是说每种移位我都考虑了),其中一行应该就是明文,但事实上我读不出任何一行来,因此初步估计这个明文不是英文,或者这个密码根本不是移位密码。

上面这些就留给各种语言的牛人看看,有没有熟悉的、读的通的语种。

在上面密密麻麻的字串中发现“CLAUDIUS”!!!

有进步!如果AEIOU还算元音的话,发现这一行可以拼读出来的可能性最大:

DABER EST SUAE QUISQUE FORTUNAE APPIUS CLAUDIUS

而且,其中FORTUNAE和CLAUDIUS有点像那种变体英文,而且后者居然在金山词霸里查到了(其实查到了也没有,因为这个词的解释我完全不明白):

Claudius

[`klR:dIEs]

n克劳迪亚斯(Claude的异体)(m)

天哪,“异体”都出来了!这是什么英文!其他的单词都可以依稀拼读出来,但我全查不到,估计可能涉及到一些英文单词的古体、词源,或其他语言,不过我真的只熟悉英文哪!

那个EST好象我在其他哪个语言中经常看见过,单从英文看读音又有点像EAST,不知道字源上有没有联系。(或者是表示最高级?)

FORTUNAE好熟悉,是什么?fortunate?fortune?或者是FORTRAN语言(笑)……

再说一句,问主啊,我帮你编程统计词频等一些概率 那听起来还不错 不过涉及到些希奇古怪的语言文字,那就算了

郁闷哪,一心想着先拿第一行研究看看,结果研究进去了,居然搞忘了还有第二行;

不过第一行都有了,第二行也跟着出来了

如果一二行是一样的话,那么:

JHLJBZ KPJABT HYJHUBT LZA ULBAYVU

就应该是

CAECUS DICTUM ARCANUM EST NEUTRON

呵呵,如何,也拼读得出来啦!我也不知道是什么意思啦!

dictum n 宣言;声明;格言;警句

arcanum n 秘密, 奥秘, 秘药

neutron n 中子

不得了,中子都出来了,一会儿还夸克呢

1 将“We are students”这个英文词句用k=4的凯萨密码翻译成密码

1 恺撒密码,

作为一种最为古老的对称加密体制,他的基本思想是:

通过把字母移动一定的位数来实现加密和解密。

例如,如果密匙是把明文字母的位数向后移动三位,那么明文字母B就变成了密文的E,依次类推,X将变成A,Y变成B,Z变成C,由此可见,位数就是凯撒密码加密和解密的密钥。

如:ZHDUHVWXGHQWV(后移三位)

2 凯撒密码,

是计算机C语言编程实现加密和解密。挺复杂的。你可以研究一下哦。

2 将凯撒密码(K=7)的加密、解密过程用C语言编程实现

/

声明:MSVC++60环境测试通过

/

#include<stdioh>

#include<ctypeh>

#define maxlen 100

#define K 7

char KaisaEncode(char str)//加密

{

char d0;

d0=str;

for(;str!='\0';str++)

{

if(isupper(str))

str=(str-'A'+K)%26+'A';

else if(islower(str))

str=(str-'a'+K)%26+'a';

else

continue;

}

return d0;

}

char KaisaDecode(char str)//解密

{

char d0;

d0=str;

for(;str!='\0';str++)

{

if(isupper(str))

str=(str-'A'-K+26)%26+'A';

else if(islower(str))

str=(str-'a'-K+26)%26+'a';

else

continue;

}

return d0;

}

int main(void)

{

char s[maxlen];

gets(s);

puts(KaisaEncode(s));

puts(KaisaDecode(s));

return 0;

}

3 将凯撒密码X的加密、解密过程用C语言编程实现

(2)kaiser加密算法 具体程序:#include #include char encrypt(char ch,int n)/加密函数,把字符向右循环移位n/ { while(ch>='A'&&ch='a'&&ch<='z') { return ('a'+(ch-'a'+n)%26); } return ch; } void menu()/菜单,1加密,2解密,3暴力破解,密码只能是数字/ { clrscr(); printf("\n========================================================="); printf("\n1Encrypt the file"); printf("\n2Decrypt the file"); printf("\n3Force decrypt file"); printf("\n4Quit\n"); printf("=========================================================\n"); printf("Please select a item:"); return; } main() { int i,n; char ch0,ch1; FILE in,out; char infile[20],outfile[20]; textbackground(BLACK); textcolor(LIGHTGREEN); clrscr(); sleep(3);/等待3秒/ menu(); ch0=getch(); while(ch0!='4') { if(ch0=='1') { clrscr(); printf("\nPlease input the infile:"); scanf("%s",infile);/输入需要加密的文件名/ if((in=fopen(infile,"r"))==NULL) { printf("Can not open the infile!\n"); printf("Press any key to exit!\n"); getch(); exit(0); } printf("Please input the key:"); scanf("%d",&n);/输入加密密码/ printf("Please input the outfile:"); scanf("%s",outfile);/输入加密后文件的文件名/ if((out=fopen(outfile,"w"))==NULL) { printf("Can not open the outfile!\n"); printf("Press any key to exit!\n"); fclose(in); getch(); exit(0); } while(!feof(in))/加密/ { fputc(encrypt(fgetc(in),n),out); } printf("\nEncrypt is over!\n"); fclose(in); fclose(out); sleep(1); } if(ch0=='2') { clrscr(); printf("\nPlease input the infile:"); scanf("%s",infile);/输入需要解密的文件名/ if((in=fopen(infile,"r"))==NULL) { printf("Can not open the infile!\n"); printf("Press any key to exit!\n"); getch(); exit(0); } printf("Please input the key:"); scanf("%d",&n);/输入解密密码(可以为加密时候的密码)/ n=26-n; printf("Please input the outfile:"); scanf("%s",outfile);/输入解密后文件的文件名/ if((out=fopen(outfile,"w"))==NULL) { printf("Can not open the outfile!\n"); printf("Press any key to exit!\n"); fclose(in); getch(); exit(0); } while(!feof(in)) { fputc(encrypt(fgetc(in),n),out); } printf("\nDecrypt is over!\n"); fclose(in); fclose(out); sleep(1); } if(ch0=='3') { clrscr(); printf("\nPlease input the infile:"); scanf("%s",infile);/输入需要解密的文件名/ if((in=fopen(infile,"r"))==NULL) { printf("Can not open the infile!\n"); printf("Press any key to exit!\n"); getch(); exit(0); } printf("Please input the outfile:"); scanf("%s",outfile);/输入解密后文件的文件名/ if((out=fopen(outfile,"w"))==NULL) { printf("Can not open the outfile!\n"); printf("Press any key to exit!\n"); fclose(in); getch(); exit(0); } for(i=1;i<=25;i++)/暴力破解过程,在察看信息正确后,可以按'Q'或者'q'退出/ { rewind(in); rewind(out); clrscr(); printf("==========================================================\n"); printf("The outfile is:\n"); printf("==========================================================\n"); while(!feof(in)) { ch1=encrypt(fgetc(in),26-i); putch(ch1); fputc(ch1,out); } printf("\n========================================================\n"); printf("The current key is: %d \n",i);/显示当前破解所用密码/ printf("Press 'Q' to quit and other key to continue。

\n"); printf("==========================================================\n"); ch1=getch(); if(ch1=='q'||ch1=='Q')/按'Q'或者'q'时退出/ { clrscr(); printf("\nGood Bye!\n"); fclose(in); fclose(out); sleep(3); exit(0); } } printf("\nForce decrypt is over!\n"); fclose(in); fclose(out); sleep(1); } menu(); ch0=getch(); } clrscr(); printf("\nGood Bye!\n"); sleep(3); }。

4 怎样编写程序:实现恺撒密码加密单词"julus"

用下面程序:新建个txt,放进去任意单词,设置#define N 5中的值,实现字母移位,达到加密目的。

本程序提供解密功能/// 版权所有:信息工程学院 王明 使用时请注明出处!! // 算法:凯撒密码体制 e799bee5baa6e4b893e5b19e31333264643062 ///#include #define N 5void jiami(char namea[256]) { FILE fp_jiami,fp_file2; char c; fp_jiami=fopen(namea,"rb"); fp_file2=fopen("file2txt","wb"); while(EOF!=(fscanf(fp_jiami,"%c",&c))) { if((c>='A'&&c='a'&&c='A'&&c='a'&&c='a'&&c='A'&&c='a'&&c='A'&&c='a'&&c='A'&&c<='Z')c=c+32; } fprintf(fp_file3,"%c",c); } fclose(fp_file3); fclose(fp_jiemi); }int main(){ char name[256]; int n; printf("输入你要 *** 作的TXT文本:"); gets(name); printf("\n请选择需要进行的 *** 作:\n"); printf(" 1:加密 2:解密 \n"); printf("输入你的选择:"); scanf("%d",&n); switch(n) { case 1:{jiami(name);printf("\t加密成功!!\n\n"); break;} case 2:{jiemi(name);printf("\t解密成功!!\n\n"); break;} default:{printf("输入 *** 作不存在!");} } return 0;}。

5 谁有PYTHON编写的凯撒密码的加密和解密代码

给你写了一个

def convert(c, key, start = 'a', n = 26):

a = ord(start)

offset = ((ord(c) - a + key)%n)

return chr(a + offset)

def caesarEncode(s, key):

o = ""

for c in s:

if cislower():

o+= convert(c, key, 'a')

elif cisupper():

o+= convert(c, key, 'A')

else:

o+= c

return o

def caesarDecode(s, key):

return caesarEncode(s, -key)

if __name__ == '__main__':

key = 3

s = 'Hello world!'

e = caesarEncode(s, key)

d = caesarDecode(e, key)

print e

print d

运行结果:

Khoor zruog!

Hello world!

以上就是关于恺撒密码全部的内容,包括:恺撒密码、世界难题!高分悬赏破译密码第二关!、凯撒密码实现英文短句的加解密等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/10106988.html

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

发表评论

登录后才能评论

评论列表(0条)

保存