导航:首页 > 编程大全 > 凯撒移位解密工具

凯撒移位解密工具

发布时间:2023-05-01 08:53:51

『壹』 关于侦探的知识。。。恺撒移位密码是什么有谁知道吗

密码的使用最早可以追溯到古罗马时期,《高卢战记》有描述恺撒曾经使用密码来传递信息,即所谓的“恺撒密码”,它是一种替代密码,通过将字母按顺序推后起3位起到加密作用,如将字母A换作字母D,将字母B换作字母E。因据说恺撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码。这是一种简单的加密方法,这种密码的密度是很低的,只需简单地统计字频就可以破译。 现今又叫“移位密码”,只不过移动的为数不一定是3位而已。
密码术可以大致别分为两种,即易位和替换,当然也有两者结合的更复杂的方法。在易位中字母不变,位置改变;替换中字母改变,位置不变。
将替换密码用于军事用途的第一个文件记载是恺撒著的《高卢记》。恺撒描述了他如何将密信送到正处在被围困、濒临投降的西塞罗。其中罗马字母被替换成希腊字母使得敌人根本无法看懂信息。
苏托尼厄斯在公元二世纪写的《恺撒传》中对恺撒用过的其中一种替换密码作了详细的描写。恺撒只是简单地把信息中的每一个字母用字母表中的该字母后的第三个字母代替。这种密码替换通常叫做恺撒移位密码,或简单的说,恺撒密码。
尽管苏托尼厄斯仅提到三个位置的恺撒移位,但显然从1到25个位置的移位我们都可以使用, 因此,为了使密码有更高的安全性,单字母替换密码就出现了。
如:
明码表 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
密码表 Q W E R T Y U I O P A S D F G H J K L Z X C V B N M
明文 F O R E S T
密文 Y G K T L Z

只需重排密码表二十六个字母的顺序,允许密码表是明码表的任意一种重排,密钥就会增加到四千亿亿亿多种,我们就有超过4×1027种密码表。破解就变得很困难。

如何破解包括恺撒密码在内的单字母替换密码?
方法:字母频度分析
尽管我们不知道是谁发现了字母频度的差异可以用于破解密码。但是9世纪的科学家阿尔·金迪在《关于破译加密信息的手稿》对该技术做了最早的描述。
“如果我们知道一条加密信息所使用的语言,那么破译这条加密信息的方法就是找出同样的语言写的一篇其他文章,大约一页纸长,然后我们计算其中每个字母的出现频率。我们将频率最高的字母标为1号,频率排第2的标为2号,第三标为3号,依次类推,直到数完样品文章中所有字母。然后我们观察需要破译的密文,同样分类出所有的字母,找出频率最高的字母,并全部用样本文章中最高频率的字母替换。第二高频的字母用样本中2号代替,第三则用3号替换,直到密文中所有字母均已被样本中的字母替换。”

以英文为例,首先我们以一篇或几篇一定长度的普通文章,建立字母表中每个字母的频度表。

在分析密文中的字母频率,将其对照即可破解。
虽然设密者后来针对频率分析技术对以前的设密方法做了些改进,比如说引进空符号等,目的是为了打破正常的字母出现频率。但是小的改进已经无法掩盖单字母替换法的巨大缺陷了。到16世纪,最好的密码破译师已经能够破译当时大多数的加密信息。

局限性:
短文可能严重偏离标准频率,加入文章少于100个字母,那么对它的解密就会比较困难。
而且不是所有文章都适用标准频度:
1969年,法国作家乔治斯·佩雷克写了一部200页的小说《逃亡》,其中没有一个含有字母e的单词。更令人称奇的是英国小说家和拼论家吉尔伯特·阿代尔成功地将《逃亡》翻译成英文,而且其中也没有一个字母e。阿代尔将这部译著命名为《真空》。如果这本书用单密码表进行加密,那么频度分析破解它会受到很大的困难。

一套新的密码系统由维热纳尔(Blaise de Vigenere)于16世纪末确立。其密码不再用一个密码表来加密,而是使用了26个不同的密码表。这种密码表最大的优点在于能够克制频度分析,从而提供更好的安全保障。
“恺撒密码”据传是古罗马恺撒大帝用来保护重要军情的加密系统。它是一种替代密码,通过将字母按顺序推后起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

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

『贰』 恺撒移位密码,将字母顺序后移5位的时候: 明文 F O R E S T 密文 K T W J X Y

如果你问的是电报码,那就还有中文电码,即用四个数字的组合代表汉字,一种无理码,差不多除了死记外无规律可循,现在基本不同了。
其实,如果是电报码,有一种就够了,何必再去发明呢?

如果您问的是密码,介绍几种常见密码形式:
1、栅栏易位法。
即把将要传递的信息中的字母交替排成上下两行,再将下面一行字母排在上面一行的后边,从而形成一段密码。
举例:盗用阿洗一个例子^^
TEOGSDYUTAENNHLNETAMSHVAED
解:
将字母分截开排成两行,如下
T E O G S D Y U T A E N N
H L N E T A M S H V A E D
再将第二行字母分别放入第一行中,得到以下结果
THE LONGEST DAY MUST HAVE AN END.
2、恺撒移位密码。
也就是一种最简单的错位法,将字母表前移或者后错几位,例如:
明码表:ABCDEFGHIJKLMNOPQRSTUVWXYZ
密码表:DEFGHIJKLMNOPQRSTUVWXYZABC
这就形成了一个简单的密码表,如果我想写frzy(即明文),那么对照上面密码表编成密码也就是iucb(即密文)了。密码表可以自己选择移几位,移动的位数也就是密钥。
3、进制转换密码。
比如给你一堆数字,乍一看头晕晕的,你可以观察数字的规律,将其转换为10进制数字,然后按照每个数字在字母表中的排列顺序,拼出正确字母。
举例:110 10010 11010 11001
解:
很明显,这些数字都是由1和0组成,那么你很快联想到什么?二进制数,是不是?嗯,那么就试着把这些数字转换成十进制试试,得到数字6 18 26 25,对应字母表,破解出明文为frzy,呵呵~
4、字母频率密码。
关于词频问题的密码,我在这里提供英文字母的出现频率给大家,其中数字全部是出现的百分比:
a 8.2 b 1.5 c 2.8 d 4.3
e 12.7 f 2.2 g 2.0 h 6.1
i 7.0 j 0.2 k 0.8 l 4.0
m 2.4 n 6.7 o 7.5 p 1.9
q 0.1 r 6.0 s 6.3 t 9.1
u 2.8 v 1.0 w 2.4 x 0.2
y 2.0 z 0.1
词频法其实就是计算各个字母在文章中的出现频率,然后大概猜测出明码表,最后验证自己的推算是否正确。这种方法由于要统计字母出现频率,需要花费时间较长,本人在此不举例和出题了,有兴趣的话,参考《跳舞的小人》和《金甲虫》。
5、维热纳尔方阵。
上面所说的频率分析,很容易破解较长篇幅的密文,于是维热纳尔继承前人的经验,创造出了这个维热纳尔方阵,从而克服了词频分析轻易能够破解密码的弊端,成为一种较为强大的密码编译形式。
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
1 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
2 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 B
3 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
4 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
5 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
6 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
7 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
8 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
9 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
10 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
11 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
12 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
13 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
14 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
15 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
16 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
17 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
18 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
19 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
20 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
21 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
22 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
23 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
24 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
25 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
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
以上就是维热纳尔方阵,它由明码表(第一行的字母)、密码表(下面26行)和密钥组成,下面我举个例子说明。
举例:
密钥:frzy
密码:qfuc
解:第一个字母,看以f开头第五行,对应明码表查找q字母所标示的字母为l。以此类推找出后面字母。所得明文为love。
一些新兴的密码形式:
1、利用键盘
无论是计算机键盘,还是手机键盘,都是出密码的好工具哦,可以用错位、或者排列形状等。使用手机键盘和这个同理。另外手机键盘还可以在键盘的字母上做文章,例如你可以用51表示字母j,用73表示字母r等。
举例:
r4a6
这个密码利用计算机键盘,将明文字母分别向上移动一个位置,得到密文。破解结果为frzy。
852 74123 74123698 74269 78974123456 7412369
这排数字是不是很晕?其实很简单,对照小键盘,依次打这些字母,看组成的形状就行了。答案是I L O V E U。
2、字母形状
本人曾经收到过这样一个密码短信,不幸被破解,导致发短信人被我非常严肃地奚落了一番^^!前面我不记得了,只记得后面是hep poo6。这个你可以从手机里打出来,然后把手机倒过来看,形成了密码的明文,good day~~~:)

20回答者: caibird1122 - 四级 2008-11-10 19:23

『叁』 用C语言编程恺撒密码加密解密程序

这个我之前写过

未加密文字:。(屠夫、面包师和蜡烛匠)。
关键密钥:
加密文字:

#include<stdio.h>
#include<string.h>
voidmain()
{
charstr[99],k[10],m[99]="";
unsignedi,j=0,n;
printf("输入要加版密的内容 ");
gets(str);
printf("输入密匙 ");
gets(k);
n=strlen(k);
for(i=0;i<strlen(str);i++)
{
权if(str[i]=='')m[i]='';
else
{
m[i]=str[i]+k[j]-'A';
if(m[i]>'Z')m[i]=m[i]-26;
j++;
}
if(j==n)j=0;
}
printf("加密后 ");
puts(m);
}

『肆』 恺撒移位密码的相关介绍

密码术可以大致别分为两种,即移位和替换,当然也有两者结合的更复杂的方法。在易位中仔碰尺字母不变,位置改变;替换中字母改变,位置不变。
将替换密码用于军事用途的第一个文件记载是恺撒著的《高卢记》。恺撒描述了他如何将密信送到正处在被围困、濒临投降的西塞罗。其中罗马字母被替换成希腊字母使得敌人根本吵岩无法看懂信息。
苏托尼厄斯在公元二世纪念高写的《恺撒传》中对恺撒用过的其中一种替换密码作了详细的描写。恺撒只是简单地把信息中的每一个字母用字母表中的该字母后的第三个字母代替。这种密码替换通常叫做恺撒移位密码,或简单的说,恺撒密码。
尽管苏托尼厄斯仅提到三个位置的恺撒移位,但显然从1到25个位置的移位我们都可以使用, 因此,为了使密码有更高的安全性,单字母替换密码就出现了。
如:
明码表 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
密码表 Q W E R T Y U I O P A S D F G H J K L Z X C V B N M
明文 F O R E S T
密文 Y G K T L Z
只需重排密码表二十六个字母的顺序,允许密码表是明码表的任意一种重排,密钥就会增加到四千亿亿亿多种,我们就有超过4×1027种密码表。破解就变得很困难。

『伍』 设密文为love,试利通用凯撒密码(k=3)对其解密,得出明文

1、首先通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表回上向后按照一个固定数目进答行偏移后被替换成密文。

『陆』 求python中的恺撒密码的加密,解密,以及破解的程序

凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推X将变成A,Y变成B,Z变成C。由此可见,位数就是凯撒密码加密和解密的密钥。
如下代码是以偏移量为13展开计算的。123

源代码如下:
sr1="abcdefghijklmnopqrstuvwxyz"sr2=sr1.upper()
sr=sr1+sr1+sr2+sr2
st="The Zen of Python"sResult=""for j in st: if j==" ":
sResult = sResult +" "
continue
i=sr.find(j) if(i>-1):
sResult=sResult+sr[i+13]print sResult12345678910111213

运行结果为:
Gur Mra bs Clguba

『柒』 凯撒密码实现英文短句的加解密

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

1. 恺撒密码,

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

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

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

如:ZHDUHVWXGHQWV(后移三位)

2. 凯撒密码,

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

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

/*

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

*/

#include<stdio.h>

#include<ctype.h>

#define maxlen 100

#define K 7

char *KaisaEncode(char *str)//加密

{

char *d0;

d0=str;

for(;*str!=''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!=''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(" ========================================================="); printf(" 1.Encrypt the file"); printf(" 2.Decrypt the file"); printf(" 3.Force decrypt file"); printf(" 4.Quit "); printf("========================================================= "); 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!=Ɗ') { if(ch0==Ƈ') { clrscr(); printf(" Please input the infile:"); scanf("%s",infile);/*输入需要加密的文件名*/ if((in=fopen(infile,"r"))==NULL) { printf("Can not open the infile! "); printf("Press any key to exit! "); 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! "); printf("Press any key to exit! "); fclose(in); getch(); exit(0); } while(!feof(in))/*加密*/ { fputc(encrypt(fgetc(in),n),out); } printf(" Encrypt is over! "); fclose(in); fclose(out); sleep(1); } if(ch0==ƈ') { clrscr(); printf(" Please input the infile:"); scanf("%s",infile);/*输入需要解密的文件名*/ if((in=fopen(infile,"r"))==NULL) { printf("Can not open the infile! "); printf("Press any key to exit! "); 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! "); printf("Press any key to exit! "); fclose(in); getch(); exit(0); } while(!feof(in)) { fputc(encrypt(fgetc(in),n),out); } printf(" Decrypt is over! "); fclose(in); fclose(out); sleep(1); } if(ch0==Ɖ') { clrscr(); printf(" Please input the infile:"); scanf("%s",infile);/*输入需要解密的文件名*/ if((in=fopen(infile,"r"))==NULL) { printf("Can not open the infile! "); printf("Press any key to exit! "); getch(); exit(0); } printf("Please input the outfile:"); scanf("%s",outfile);/*输入解密后文件的文件名*/ if((out=fopen(outfile,"w"))==NULL) { printf("Can not open the outfile! "); printf("Press any key to exit! "); fclose(in); getch(); exit(0); } for(i=1;i<=25;i++)/*暴力破解过程,在察看信息正确后,可以按'Q'或者'q'退出*/ { rewind(in); rewind(out); clrscr(); printf("========================================================== "); printf("The outfile is: "); printf("========================================================== "); while(!feof(in)) { ch1=encrypt(fgetc(in),26-i); putch(ch1); fputc(ch1,out); } printf(" ======================================================== "); printf("The current key is: %d ",i);/*显示当前破解所用密码*/ printf("Press 'Q' to quit and other key to continue。

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

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

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

本程序提供解密功能/************************************************************************//* 版权所有:信息工程学院 王明 使用时请注明出处!! *//* 算法:凯撒密码体制 *//************************************************************************/#include #define N 5void jiami(char namea[256]) { FILE *fp_jiami,*fp_file2; char c; fp_jiami=fopen(namea,"rb"); fp_file2=fopen("file2.txt","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(" 请选择需要进行的操作: "); printf(" 1:加密 2:解密 "); printf("输入你的选择:"); scanf("%d",&n); switch(n) { case 1:{jiami(name);printf(" 加密成功!! "); break;} case 2:{jiemi(name);printf(" 解密成功!! "); 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 c.islower():

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

elif c.isupper():

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!

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

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

下面是成品说明

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

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)+加密密钥+输入/输出内容+分割线”

『玖』 世界难题!高分悬赏破译密码第二关!

原题好像是 MHILY LZA ZBHL XBPZXBL MVYABUHL HWWPBZ JSHBKPBZ
JHLJBZ KPJABT HYJHUBT LZA ULBAYVU

拉丁文:faber est suae quisque fortunae appius claudius caecus dictum arcanum est neutron

意思好像是"Everyone is the builder of his own fortune." Appius Claudius Caecus.
a secret saying:neutron
“每个人都是自己财富的创造者”这句话是古代一个诗人Appius Claudius Caecus说得.密码单词是 neutron,它可能对下一关有帮助

『拾』 密码那些事儿|(五)换个位置,面目全非

移位法和替代法大约5000年前出现,但直到9世纪才被阿拉伯人发明的频率分析法破解,中间隔了足足有4000年。在另一边的欧洲,实际上直到16世纪,都还没掌握这种破解方法。从这里我们也能感受到,阿拉伯文明曾经的辉煌。

移位法很简单。我举个例子,比如你的答乎电话号码13911095871,把每个数字都在数列中往后加1,那么1变2,2变3,加密后就变成了24022106982。

13911095871叫做明文,24022106982则是它对应的密文。

字母的移位也是同样的道理,因为字母是遵循着abcdef……xyz的顺序排列,一共26个,看起来会比单纯的数字移位复杂一些,但本质上仍是一样的。

比如要对iron man加密,加密规则选择每个字母都向后移动3位, “iron man”就变成了“lurq pdq”。

没有经验的人乍看一下,完全就是乱码,实际上它只不过做了基础加密而已。这就是最基础的移位法。

大约在公元前700年左右,出现了用一种叫做Scytale的圆木棍来进行保密通信的方式。这种Scytale圆木棍也许是人类最早使用的文字加密解密工具,据说主要是古希腊城邦中的斯巴达人(Sparta)在使用它,所以又被叫做“斯巴达棒”。

相传雅典和斯巴达之间的伯罗奔尼撒战争中,斯巴达军队截获了一条写满杂乱无章的希腊字母的腰带,斯巴达将军在百思不得其解之际,胡乱将腰带缠到自己的宝剑上,从而误打误撞发清竖悉现了其中隐藏的军机。这就是斯巴达密纤缓码棒的由来。

“斯巴达棒”的加密原理就是,把长带子状羊皮纸缠绕在圆木棍上,然后在上面写字;解下羊皮纸后,上面只有杂乱无章的字符,只有再次以同样的方式缠绕到同样粗细的棍子上,才能看出所写的内容。

比如像上图那样,在缠好的布带上写上“ YOU ARE IN DANGER”,然后再拆下来,布带上的文字顺序就变成了“YIONUDAARNEGER”,完全看不出任何头绪,这样就起到了加密的作用。

2100年前,古罗马的执政官和军队统帅恺撒(Julius Caesar,公元前100—前44)发明了一种把所有的字母按字母表顺序循环移位的文字加密方法。例如,当规定按字母表顺移3位的话,那么a就写成d,b写成e,c写成f,…,x写成a,y写成b,z写成c。单词Hello就写成了Khoor。如果不知道加密方法,谁也不会知道这个词的意思。解密时,只需把所有的字母逆移3位,就能读到正确的文本了。

上图就是根据恺撒加密法的原理而制作的字母循环移位盘。可以根据需要设定加密时移位的位数,以供加密或解密时快速查询。据说恺撒当年就是使用这种加密方法与手下的将军们通信的。

从密码学的角度来看,虽然恺撒加密法的规则很简单,然而,恺撒加密的思想对于西方古典密码学的发展有着很大影响。

事实上,直到第二次世界大战结束,西方所使用的加密方法原理大多与恺撒加密法类似,只是规则越来越复杂而已。

尽管移位法加密在西方得到了很普遍的应用,但在中国的史书上却很少记载,各位朋友可以想一想是为什么?

感兴趣的朋友们不妨在评论区一起聊一聊。

下一次,我们继续了解移位法和替代法的故事。

往期文章:

密码那些事儿|(四)隐藏的消息

密码那些事儿|(三)“风语者”——从未被破解的密码

密码那些事儿|(二)密码学发展的七个阶段

密码那些事儿|(一)无所不在的密码

本人是官方授权会员推广专员,点击 会员专属通道 成为会员,您将会获得钻奖励及诸多权益!

《钻奖励调整公告》

阅读全文

与凯撒移位解密工具相关的资料

热点内容
哪里适合孩子学习编程 浏览:773
miui8桌面文件夹 浏览:18
哪些文件值得收藏 浏览:549
linux查看几兆网卡 浏览:386
iphone4清理后台 浏览:599
new文件怎么改为pdf 浏览:930
刻录文件用什么打印机 浏览:888
德国大数据工程师年薪大概多少钱 浏览:870
训练哪个app好 浏览:821
90版本新男魔法师刷图加点2015 浏览:881
如何进行数据差异性比较 浏览:68
微信聊天记录默认存在哪个文件夹 浏览:252
张孝祥java邮件开发详解 浏览:431
财政保障水平分析取哪个数据 浏览:391
linux下增加路由命令 浏览:419
iphone冲刷固件 浏览:604
网络机房平面图 浏览:579
笔记本电脑卡慢怎么处理win10 浏览:77
编程仿真用什么软件 浏览:424
数控编程到哪里找工作 浏览:48

友情链接