Posted by & filed under 每日一题.

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

20110928102006760

 

 

 

 

 

 

这个算法对于古代的人来说,加密解密都是要手工对照去对比,比较繁琐,现在有了计算机,尤其是有了史上最好的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&lt;=ord('Z');$i++){
$n = $i+3;
if($n&gt;ord('Z')){
$n = ord('A')+$m;
$m++;
}
$table[chr($i)] = chr($n);
}
//加密
if($type == 'ENCODE'){
$encrypt = '';
for($i=0;$i&lt;strlen($str);$i++){
$encrypt .= !isset($table[$str{$i}]) ? $str{$i} : $table[$str{$i}]; //其他字符原样输出
}
return $encrypt;
}else{ //解密
$decrypt = '';
for($i=0;$i&lt;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