最近也不知道咋回事,老能瞅见“凯萨”这个词儿。一会儿说是哪个古代部落的大酋长,跟人干仗特牛;一会儿又是什么电影里边的猩球首领,也叫凯萨,带着一帮猴子猩猩的闹腾。我寻思这“凯萨”到底是何方神圣,这么火?
琢磨来琢磨去,突然想起来,咱们这行当里头,好像也有个叫“凯萨”的玩意儿,那就是凯撒密码!这不巧了吗?正好最近手头没啥紧要的活儿,闲着也是闲着,干脆就动手捣鼓捣鼓这个古董级的密码,看看它到底是个啥名堂。
一拍脑袋,说干就干
这凯撒密码,听着名字挺唬人,原理简单得很。我上网随便扒拉了一下资料,,原来就是把字母表上的字母往后挪那么几位。比如A往后挪3位变成D,B变成E,以此类推。这玩意儿据说还是古罗马那会儿凯撒大帝用来传军事情报的,也不知道是真是假。反正我想着这能有多难?分分钟搞定它!
动手开搞,小坑不断
我这人就是这样,想到啥就想立马试试。也没多想,直接就打开我那用了好几年的电脑,找了个最顺手的编辑器,就开始敲代码了。也没用啥复杂的语言,就想着怎么简单怎么来,毕竟这玩意儿本身也不复杂嘛
第一步,先弄加密。 这好办,就是遍历咱要加密的那段话,拿到每个字母,然后给它加上一个咱们定好的数字,比如咱们定个3。那'a'就变成'd','x'就变成……'a'?对,'x'挪三位就该是'a'了。这儿就遇到了第一个小问题:字母表它是会拐弯的!Z后面就该是A了。我一开始直接加,好家伙,直接超出字母范围了,变成了些奇奇怪怪的符号,根本看不懂。后来脑袋一转,想起来小学数学老师教的那个叫啥来着,对,取模运算,用在这里正合适!问题解决,心里美滋滋。
我还特意想了想,那大写字母咋办?小写字母咋办?一开始我想着干脆都给它变成小写再加密,多省事。后来又觉得,不行,得保持原样,大写的加密完还得是大写,小写的还是小写,这样才专业嘛所以就多写了几行判断,分开来处理,也不麻烦。
第二步,搞解密。 加密既然是往后挪,那解密肯定就是往前挪呗。这逻辑简单,我脑子转得快着。还是那个字母表会拐弯的问题,A往前挪3位,不能变成负数,得变成X。又是取模,不过这回得小心点,因为往前挪可能会出现负数索引,得先加上一个周期(比如26个字母就是26)再取模,保证结果是正的。这点小细节稍微琢磨了一下也就通了,不算啥大事。
第三步,测试和优化(也没啥优化的)。 我随便输了段话,类似“Hello World, this is a test!” 看看加密出来是啥鬼样子,然后再用解密函数给它还原回来。还真行!一字不差。不过我又发现个问题,空格和标点符号咋整?它们也要跟着加密吗?我查了查,好像正宗的凯撒密码一般就只针对字母。得,那咱也从简,遇到不是字母的字符,就让它保持原样不动。这样一来,代码又简单了不少,我这懒人最喜欢了,能少写一行是一行。
- 加密的时候字母挪到头了咋办:用取模运算让它从头开始。
- 解密的时候字母往前挪到头了咋办:也用取模,不过要处理好别变成负数。
- 大写小写字母的问题:分开处理,加密完保持原来的大小写。
- 那些不是字母的,比如空格逗号咋办:让它们原地待着,不动弹。
搞定收工,一点感想
折腾了大半天(也就个把小时,中间还喝了杯茶),总算是把这个所谓的“凯萨”密码给弄明白了,也亲手实现了一遍。你还别说,虽然这玩意儿简单到掉渣,破解起来估计连我隔壁上小学的侄子都不用一分钟,但自己动手敲出来,看到加密解密成功的那一刻,心里头还是有点小小的成就感的,跟解决了个大难题似的。
感觉就像小时候玩那种解码玩具一样,挺有意思。现在想想,那个罗马的凯撒大帝,当年是不是也觉得自己的这个发明特牛逼?哈哈,纯属瞎猜。这玩意儿在今天看来,屁用没有,安全性基本为零,随便哪个懂点行的都能给它破了。通过这个小小的实践,也算是对密码学这门大学问有了个最最最浅显的认识,就跟刚摸到门边儿一样。就当是技术考古,玩玩呗,也挺总比天天对着那些复杂的业务逻辑强点儿。
下次再看到啥稀奇古怪的名字,或者啥有意思的小玩意儿,说不定我又手痒想去捣鼓捣鼓了。生活嘛不就是瞎折腾才有点意思嘛对不对?不然天天上班下班,多没劲。
还没有评论,来说两句吧...