凯撒密码
凯撒密码是把字母表中的每个字母用该字母后面第3个字母进行替代,如表3-2所示。为便于区分,我们用小写字母表示明文,大写字母表示密文。
明文:this is a book。
密文:WKLV LV D ERRN。
明文和密文空间是26个字母的循环,所以z后面的字母是a。如果为每个字母分配一个数值(a=0,b=l,…,z=25),则该算法能够表示如下:
C=EK(p)=(p+3)%26
变种
我们可以把每个字母用该字母后面第k个字母进行替代,即
C=EK(p)=(p+k)%26
便得到凯撒密码的变种加密方式了。
代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
string encrypt(string message, int key) { string result = message; for(int i=0;i<result.size();i++) { if(message[i] == ' ') continue;
result[i] = ((message[i] - 'a' + key) % 26) + 'a'; } return result; }
string decrypt(string message, int key) { return encrypt(message, -key+26); }
|
实践
利用自己编写的变形凯撒加解密程序,尝试破译密文:
1
| rjjy rj ts ymj xfggfym bj bnqq inxhzxxymj uqfs
|
我们可以遍历整个key空间key∈[0,25) ,共26种情况依次解密,得出通顺的密文则为破译成功。
1 2 3 4 5 6 7
| int main() { string c = "rjjy rj ts ymj xfggfym bj bnqq inxhzxxymj uqfs"; for(int i=0;i<26;i++) { cout<<i<<". "<<decrypt(c, i)<<endl; } return 0; }
|
运行结果如下,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| 0. rjjy rj ts ymj xfggfym bj bnqq inxhzxxymj uqfs 1. qiix qi sr xli weffexl ai ampp hmwgywwxli tper 2. phhw ph rq wkh vdeedwk zh zloo glvfxvvwkh sodq 3. oggv og qp vjg ucddcvj yg yknn fkuewuuvjg rncp 4. nffu nf po uif tbccbui xf xjmm ejtdvttuif qmbo 5. meet me on the sabbath we will discussthe plan 6. ldds ld nm sgd rzaazsg vd vhkk chrbtrrsgd okzm 7. kccr kc ml rfc qyzzyrf uc ugjj bgqasqqrfc njyl 8. jbbq jb lk qeb pxyyxqe tb tfii afpzrppqeb mixk 9. iaap ia kj pda owxxwpd sa sehh zeoyqoopda lhwj 10. hzzo hz ji ocz nvwwvoc rz rdgg ydnxpnnocz kgvi 11. gyyn gy ih nby muvvunb qy qcff xcmwommnby jfuh 12. fxxm fx hg max ltuutma px pbee wblvnllmax ietg 13. ewwl ew gf lzw ksttslz ow oadd vakumkklzw hdsf 14. dvvk dv fe kyv jrssrky nv nzcc uzjtljjkyv gcre 15. cuuj cu ed jxu iqrrqjx mu mybb tyiskiijxu fbqd 16. btti bt dc iwt hpqqpiw lt lxaa sxhrjhhiwt eapc 17. assh as cb hvs goppohv ks kwzz rwgqigghvs dzob 18. zrrg zr ba gur fnoongu jr jvyy qvfphffgur cyna 19. yqqf yq az ftq emnnmft iq iuxx pueogeeftq bxmz 20. xppe xp zy esp dlmmles hp htww otdnfddesp awly 21. wood wo yx dro ckllkdr go gsvv nscmeccdro zvkx 22. vnnc vn xw cqn bjkkjcq fn fruu mrbldbbcqn yujw 23. ummb um wv bpm aijjibp em eqtt lqakcaabpm xtiv 24. tlla tl vu aol zhiihao dl dpss kpzjbzzaol wshu 25. skkz sk ut znk yghhgzn ck corr joyiayyznk vrgt
|
观察可得当key=5时对应的明文符合正常语句。
即得出明文:
1
| meet me on the sabbath we will discussthe plan
|
破译成功