英国专家西蒙辛格向全世界悬赏15000美圆征求破译十道密码。至今无人获奖。
原文:《第一关:简单的单字母替换密码》
BT JPX RMLX PCUV AMLX ICVJP IBTWXVR CI M LMT’R PMTN, MTN
YVCJX CDXV MWMBTRJ JPX AMTNGXRJBAH UQCT JPX QGMRJXV CI JPX
YMGG CI JPX HBTW’R QMGMAX MTN JPX HBTW RMY JPX QMVJ CI JPX
PMTN JPMJ YVCJX. JPXT JPX HBTW’R ACUTJXTMTAX YMR APMTWXN,
MTN PBR JPCUWPJR JVCUFGXN PBL, RC JPMJ JPX SCBTJR CI PBR
GCBTR YXVX GCCRXN, MTN PBR HTXXR RLCJX CTX MWMBTRJ
MTCJPXV . JPX HBTW AVBXN MGCUN JC FVBTW BT JPX MRJVCGCWXVR,
JPX APMGNXMTR, MTN JPX RCCJPRMEXVR. MTN JPX HBTW RQMHX,
MTN RMBN JC JPX YBRX LXT CI FMFEGCT, YPCRCXDXV RPMGG VXMN
JPBR YVBJBTW, MTN RPCY LX JPX BTJXVQVXJMJBCT JPXVXCT,
RPMGG FX AGCJPXN YBJP RAMVGXJ, MTN PMDX M APMBT CI WCGN
MFCUJ PBR TXAH, MTN RPMGG FX JPX JPBVN VUGXV BT JPX
HBTWNCL. JPXT AMLX BT MGG JPX HBTW’R YBRX LXT; FUJ JPXE
ACUGN TCJ VXMN JPX YVBJBTW, TCV LMHX HTCYT JC JPX HBTW JPX
BTJXVQVXJMJBCT JPXVXCTI. JPXT YMR HBTW FXGRPMOOMV WVWMJGE
JVCUFGXN, MTN PBR ACUTJXTMTAX YMR APMTWXN BT PBL, MTN PBR
GCVNR YXVX MRJCTBRPXN. TCY JPX KUXXT, FE VXMRCT CI JPX
YCVNR CI JPX HBTW MTN PBR GCVNR, AMLX BTJC JPX FMTKUXJ
PCURX; MTN JPX KUXXT RQMHX MTN RMBN, C HBTW, GBDX ICVXDXV;
GXJ TCJ JPE JPCUWPJR JVCUFGX JPXX, TCV GXJ JPE ACUTJXTMTAX
FX APMTWXN; JPXVX BR M LMT BT JPE HBTWNCL , BT YPCL BR JPX
RQBVBJ CI JPX PCGE WCNR ; MTN BT JPX NMER CI JPE IMJPXV
GBWPJ MTN UTNXVRJMTNBTW MTN YBRNCL , GBHX JPX YBRNCL CI JPX
WCNR, YMR ICUTN BT PBL; YPCL JPX HBTW TXFUAPMNTXOOMV JPE
IMJPXV, JPX HBTW, B RME, JPE IMJPXV, LMNX LMRJXV CI JPX
LMNBABMTR, MRJVCGCWXVR, APMGNXMTR, MTN RCCJPRMEXVR;
ICVMRLUAP MR MT XZAXGGXTJ RQBVBJ, MTN HTCYGXNWX, MTN
UTNXVRJMTNBTW, BTJXVQVXJBTW CI NVXMLR, MTN RPCYBTW CI PMVN
RXTJXTAXR, MTN NBRRCGDBTW CI NCUFJR, YXVX ICUTN BT JPX
RMLX NMTBXG, YPCL JPX HBTW TMLXN FXGJXRPMOOMV; TCY GXJ
NMTBXG FX AMGGXN, MTN PX YBGG RPCY JPX BTJXVXJMJBCT. JPX
IBVRJ ACNXYCVN BR CJPXGGC.
楼主备注:
解释一下,所谓“单字母替换密码”就是密码的一个字母只代表明码的一个字母,但是各密码字母与字母表的顺序无关,比如A如果是m,那么B不一定是n。这是跟恺撒密码不同之处(恺撒密码的A如果是m,那么B一定是n)。
破译“单字母替换密码”就是要通过英文的特点,寻找其中的突破点,然后破译整个字母表,进而破译全文。
希望大家玩得高兴!
谢谢大家的参与!
大家还可以去破译第二关!
第三关字母太多,待俺慢慢输入后公布.400分奖励哦!
至今没有人宣布“密码单词”。
每题都有其“密码单词”,凭10个“密码单词”向西蒙辛格领取奖金!
in the same hour came forth fingers of a man’s hand, and
wrote over against the candlestick upon the plaster of the
wall of the king’s palace and the king saw the part of the
hand that wrote. then the king’s countenance was changed,
and his thoughts troubled him, so that the joints of his
loins were loosed, and his knees smote one against
another . the king cried aloud to bring in the astrologers,
the chaldeans, and the soothsayers. and the king spake,
and said to the wise men of babylon, whosoever shall read
this writing, and show me the interpretation thereon,
shall be clothed with scarlet, and have a chain of gold
about his neck, and shall be the third ruler in the
kingdom. then came in all the king’s wise men; but they
could not read the writing, nor make known to the king the
interpretation thereonf. then was king belshazzar grgatly
troubled, and his countenance was changed in him, and his
lords were astonished. now the queen, by reason of the
words of the king and his lords, came into the banquet
house; and the queen spake and said, o king, live forever;
let not thy thoughts trouble thee, nor let thy countenance
be changed; there is a man in thy kingdom , in whom is the
spirit of the holy gods ; and in the days of thy father
light and understanding and wisdom , like the wisdom of the
gods, was found in him; whom the king nebuchadnezzar thy
father, the king, i say, thy father, made master of the
madicians, astrologers, chaldeans, and soothsayers;
forasmuch as an excellent spirit, and knowledge, and
understanding, interpreting of dreams, and showing of hard
sentences, and dissolving of doubts, were found in the
same daniel, whom the king named belteshazzar; now let
daniel be called, and he will show the interetation. the
first codeword is othello
等有空了再说过程
过程补充:
因为文字这么多,就可以从词频入手了。
第一步:
英文字母出现频率
先从baidu上搜索出英文字母词频分布情况:
高频字母:E、 T、A、O、N、I、R、S、H
中频字母:D、L、U、C、M
低频字母:P、F、Y、W、G、B、Y(v?)
稀频字母:J、K、Q、X、Z
第二步:
确定字母e
再统计一个原文中各个字母出现的频率。具体情况我就不列出来了。全部字母1405字,字母X出现了167次,比排名第二的T的133次要高出很多
,几乎可以肯定X=e。(为了方便替换,在word里将全部大写字母换成小写)。然后,因为Z和S都只出现了一次,于是大胆猜测它们就是x和e
。而且在e破译出来后,有eZ***的词出现,一般英文中ex***的词不少,于是暂定Z~x,S~z。因为x和z出现次数也不多,暂时这么估计也不会
太影响总体。
第三步
从短单词入手
在e取代了X后,观察到全文中有很多‘JPe’这样的词出现,很容易就会想到它们就是‘the’。于是J=t,P=h。
再观察只有一个字母的单词,文中出现过3次‘M’和1次‘B’用一个字母作词的情况,这与英文中的‘a’和‘I’作为单词几乎是对应的。鉴
于‘I’在单独作单词时通常在句首,观察M和B的位置,可以得到M=a,B=i。
还有文中的'R情况,根据英文的所有格用法,容易想到R=s。
第四步
利用已有条件,解决特征单词
因为一眼瞥见了替换后的‘saE’,于是查一下金山词霸,从sad/sap/sat/saw/say中,排除已用字母t的sat,根据词的位置基本可以排除掉形
容词sad,再根据文中还多次出现‘thE’这个词,用w、p或d套用都不能成词,而‘thy’是古英文中‘你’的意思,还可以接受E=y。
又,在替换后‘iT’多次出现,估计T~f或T~n。根据词频规律以及T在本文中出现的高达133次来看,T不会是低频字母f,所以T=n。
很多地方的‘anN’使人很容易将N=d推断出来。
第五步
解决剩下的高词频字母
在出现100次以上的字母中,只剩下C还没有对应,而词频排名第四的o也还没有对应,可以猜想C~o,文中‘CI’这样的词出现多次,估计为‘
of’,而f对应的词频和I出现的次数也相当。因此确定C=o,I=f。
高词频还有剩下有r,而文中很多词的后缀是‘-eV’,所以判断V=r。多个地方验证也还可行。
第六步
逐渐解决剩下的字母
根据后缀‘-inW’来找出W=g,根据两个‘Yrote’来得到Y=w,根据‘Hnown’和‘Hing's’来得到H=k。
剩下的就简单了:G=l,Q=p,U=u,K=q,A=c,L=m,F=b,D=v。
最后剩下个O~j。
第七步
验证
发现有的单词出错,出现一次的‘zoints’和‘belshajjar’都不是单词,试着将‘z’和‘j’换一下,就正确了,而且后者是圣经里的名词
,还有古英文的thy和thee。应该没问题了。所以最后O=z,S=j,再确定前边的Z=x。就完了。
字符统频 |标准| > 4.000000
频次表
00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
00 0 0 0 0 0 0 0 0 0 0 17 0 0 17 0 0
01 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
02 348 0 0 0 0 0 0 0 0 0 0 0 17 0 6 0
03 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
04 0 18 48 58 3 5 11 30 16 12 76 1 12 68 36 2
05 67 7 52 1 75 13 40 23 93 19 0 0 0 0 0 0
06 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
07 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
08 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
09 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0a 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 4
0b 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0f 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
T值表
00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
00 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 5.70 -2.17 -2.17 5.70 -2.17 -2.17
01 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17
02158.88 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 5.70 -2.17 0.61 -2.17
03 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -1.71 -2.17 -2.17 -2.17 -2.17
04 -2.17 6.16 20.04 24.67 -0.78 0.14 2.92 11.71 5.24 3.38 33.00 -1.71 3.38 29.30 14.49 -1.24
05 28.84 1.07 21.90 -1.71 32.54 3.85 16.34 8.47 40.87 6.62 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17
06 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17
07 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17
08 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17
09 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17
0a -2.17 -0.32 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -0.32
0b -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17
0c -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17
0d -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17
0e -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17
0f -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17 -2.17
下面是敏感信息
0a 17 5.6980(回车换行)
0d 17 5.6980
20 348 158.8799
2c , 17 5.6980
41 A 18 6.1608
42 B 48 20.0444
43 C 58 24.6722
47 G 30 11.7142
48 H 16 5.2353
4a J 76 33.0024
4d M 68 29.3001
4e N 36 14.4910
50 P 67 28.8373
52 R 52 21.8955
54 T 75 32.5396
56 V 40 16.3421
57 W 23 8.4747
58 X 93 40.8697
59 Y 19 6.6236
计算相应频次,发现和英文字母出现的频次相近,由T值分析不是耦合现象,这是典型的代替作业模式;
英文字母使用频率表:(%)
A 8.19 B 1.47 C 3.83 D 3.91 E 12.25 F 2.26 G 1.71
H 4.57 I 7.10 J 0.14 K 0.41 L 3.77 M 3.34 N 7.06
O 7.26 P 2.89 Q 0.09 R 6.85 S 6.36 T 9.41
U 2.58 V 1.09 W 1.59 X 0.21 Y 1.58 Z 0.08
高频字母设字: eg(X = E)
利用词的频率特性,除了汉字的构词特性外,英文单词也存在明显的构词和字母跟随关系,比如在10000个英文单词中
(包含功能词汇),and出现142次,the出现420次等等,同时也根据英文语法关系可是设字破译,比如文中出现的'
后面的字符一般是s或者m,随意可以假定(R=S)
具体设字破译阶段bcgzcr已经分析的很透彻了,我在这里只是给出了一般意义上的此类密码的破译思路.
在设立字符替代的基础上,反复带入进行验证,知道带入字符不出现矛盾的情况下,由英文单词的特性来推全所有的
密钥即可.
本文密钥:
明文: ABCDEFGHIJKLMNOPQRSTUVWXYZ
密钥: CIOVYBLKFTQMADZHPSJNURGEWX
#include"ctype.h"
#include"stdlib.h"
main(int argc ,char *argv[])
{
FILE *fp_ciper,*fp_plain; //密文与明文的文件指针
char ch_ciper,ch_plain;
int i,temp=0; //i用来存最多次数的下标
//temp用在求最多次数时用
int key; //密钥
int j;
int num[26]; //保存密文中字母出现次数
for(i = 0;i < 26; i++)
num = 0; //进行对num[]数组的初始化
printf("======================================================\n");
printf("------------------BY 安美洪 design--------------------\n");
printf("======================================================\n");
if(argc!=3)
{
printf("此为KAISER解密用法:[文件名] [密文路径] [明文路径]\n");
printf("如:decryption F:\ciper_2_1.txt F:\plain.txt\n");
} //判断程序输入参数是否正确
if((fp_ciper=fopen(argv[1],"r"))==NULL)
{
printf("打开密文出错!解密失败\n");
exit(0);
}
while((ch_ciper=fgetc(fp_ciper))!=EOF)
switch(ch_ciper)
{
case 'A':num[0]=num[0]+1; break; //统计密文各字母出现次数
case 'B':num[1]=num[1]+1; break; //与上同,下边一样
case 'C':num[2]=num[2]+1; break;
case 'D':num[3]=num[3]+1; break;
case 'E':num[4]=num[4]+1; break;
case 'F':num[5]=num[5]+1; break;
case 'G':num[6]=num[6]+1; break;
case 'H':num[7]=num[7]+1; break;
case 'I':num[8]=num[8]+1; break;
case 'J':num[9]=num[9]+1; break;
case 'K':num[10]=num[10]+1;break;
case 'L':num[11]=num[11]+1;break;
case 'M':num[12]=num[12]+1;break;
case 'N':num[13]=num[13]+1;break;
case '0':num[14]=num[14]+1;break;
case 'P':num[15]=num[15]+1;break;
case 'Q':num[16]=num[16]+1;break;
case 'R':num[17]=num[17]+1;break;
case 'S':num[18]=num[18]+1;break;
case 'T':num[19]=num[19]+1;break;
case 'U':num[20]=num[20]+1;break;
case 'V':num[21]=num[21]+1;break;
case 'W':num[22]=num[22]+1;break;
case 'X':num[23]=num[23]+1;break;
case 'Y':num[24]=num[24]+1;break;
case 'Z':num[25]=num[25]+1;break;
}
fclose(fp_ciper);
for(i=0;i<26;i++)
if(num>temp)
{
j=i; // 求出最大次数的下下标
temp=num;
}
if(j<5)
key=(j+1+26)-5; //是按字母表的第几位计算
//而不是按下标,故加1
//5是指E在字母表中的位序
else
key=(j+1)-5;
if((fp_ciper=fopen(argv[1],"r"))==NULL)
{
printf("再次打开密文出错!解密失败\n");
exit(0);
} //再次打开密文,进行解密
if((fp_plain=fopen(argv[2],"w"))==NULL)
{
printf("打开或建立明文文件出错!解密失败\n");
exit(0);
} //把明文存到此文件
while((ch_ciper=fgetc(fp_ciper))!=EOF)
{
if(ch_ciper > 'E')
ch_plain=(((ch_ciper-'A'-key)%26)+'A'); //解密
else
ch_plain=(((ch_ciper-'A'-key+26)%26)+'A'); //解密
ch_plain=tolower(ch_plain); //把大写明文转化为小写
fputc(ch_plain,fp_plain); //把明文写到文件文件plain
}
fclose(fp_ciper);
fclose(fp_plain);
printf("解密成功,密钥KEY=%d,明文已保存到文件中,谢谢使用!\n",key);
}
编个小循环程序 循环26次 什么问题都搞定了。
太业余了。 来点难的。
for(i=1,i<=26,i++)
{替代 chr(i+ ??)(目的是i=1-26 与chr(x)里的x顺序一致) ;
printf(chr(x) 打印到屏幕}
最后看 屏幕上26 行哪个是能看懂的语言。。
呵呵。 不用全部都试 只要 整篇里的一句就可以。
这中方法基本能解决所有移位密码( 其实这还称不上密码)
不过第一关真的是太简单了,JPX也是太明显了
拿到Word里去慢慢替换(区分大小写——换了的都换成小写,还是原来的密文就保留原来的大写)10分钟应该搞定。