【四脚猫】每日一题(2016年10月24日): 凯撒密码(caeser)是罗马扩张时期朱利斯•凯撒(Julius Caesar)创造的,用于加密通过信使传递的作战命令。它将字母表中的字母移动一定位置而实现加密。原理图如下:

这个算法对于古代的人来说,加密解密都是要手工对照去对比,比较繁琐,现在有了计算机,尤其是有了史上最好的PHP语言,应该能轻松应对吧 :) ,试试看,用PHP来实现凯撒密码的加密解密。
以下是asun 提供的实现方法:
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 27 28 29 30 31 32 | <div class="ds-comment-header"></div> function caeser($str,$type='ENCODE'){ $str = strtoupper($str); //先创建一套密码表 $table = array(); $m = 0; for($i=ord('A');$i<=ord('Z');$i++){ $n = $i+3; if($n>ord('Z')){ $n = ord('A')+$m; $m++; } $table[chr($i)] = chr($n); } //加密 if($type == 'ENCODE'){ $encrypt = ''; for($i=0;$i<strlen($str);$i++){ $encrypt .= !isset($table[$str{$i}]) ? $str{$i} : $table[$str{$i}]; //其他字符原样输出 } return $encrypt; }else{ //解密 $decrypt = ''; for($i=0;$i<strlen($str);$i++){ $decrypt .= !isset($table[$str{$i}]) ? $str{$i} : array_search($str{$i}, $table); //其他字符原样输出 } return $decrypt; } } echo caeser('hello world!');exit;// KHOOR ZRUOG! echo caeser('KHOOR ZRUOG!','decode');exit;//HELLO WORLD! |
这个解法中,密钥是固定的,可以继续优化下,让密钥可以变化 :)
欢迎各位攻城狮,各位大牛给每日一题投稿,大家可以把自己碰到的有趣问题,工作中碰到的难题等…发送到 稿件邮箱:2313427189@qq.com