phpカエサル暗号解読

暑さにやられたか!!!暑さだけじゃないと思うけど、やる気がダウンながらも書きます($・・)/~~~

 

今回はphpカエサル暗号解読_ _!

 

シーザー暗号 - Wikipedia

シーザー暗号は単一換字式暗号の一種で、平文の各文字を、辞書順に3文字分シフトして暗号文を作る暗号である。

極めて単純な暗号であるが、現代の暗号においても重要な、規則(アルゴリズム)および鍵といった2つの要素が既に含まれている。

  • 規則:特定の文字を、それよりも辞書順に特定の数だけ後ろ(もしくは前)にある文字と置きかえる手順にあたる。
  • 鍵:辞書順にずらす数値のこと。カエサルが実際に用いたシーザー暗号の場合、3という数字が鍵となる。

 

 

・練習としてGti Bashを使ってgithubにアップロードした!!!

github.com

 

・暗号鍵は不明 - 文字列に"person"が含まれる

・-暗号文- qdq-gi.q-a ziatmxxitmdqibtqi-ustbi ri.qmoqrcxi.qbubu zir -ibtqi-qp-qaai ripmymsqkir -ibtqi-qy dmxi ri.cnxuoi rruoumxakir -ibtqiqzmobyqzbkii-q.qmxi –imyqzpyqzbi rixmeaki -puzmzoqai -i-qscxmbu zaimzpir -i btqiymbbq-a;iz -iatmxximzgi.q-a zinqiuzimzgiemgipuaouyuzmbqpimsmuzabir -ia. za -uzsiacotiimi.qbubu zj

・使用する文字

"abcdefghijklmnopqrstuvwxyz .,-"の30文字

>|php|

<?php

$code = "qdq-gi.q-a ziatmxxitmdqibtqi-ustbi ri.qmoqrcxi.qbubu zir -ibtqi-qp-qaai ripmymsqkir -ibtqi-qy dmxi ri.cnxuoi rruoumxakir -ibtqiqzmobyqzbkii-q.qmxi -imyqzpyqzbi rixmeaki -puzmzoqai -i-qscxmbu zaimzpir -i btq-iymbbq-a;iz -iatmxximzgi.q-a zinqiuzimzgiemgipuao-uyuzmbqpimsmuzabir -ia. za -uzsiacotiimi.qbubu zj";
$char = "abcdefghijklmnopqrstuvwxyz .,-";

$char_length = strlen($char);
$code_length = strlen($code);

for ($i = 0; $i < $char_length; $i++) {

$new_str = "";

for ($j = 0; $j < $code_length; $j++) {
$c = $code{$j};//$codeを一文字ずつ

$match_index = strpos($char, $c);//暗号文一文字一文字がアルファベットでの位置

if (0 <= $match_index) {
$c = $char{($match_index + $i) % $char_length};
}
$new_str.= $c;
}
$z = strpos($new_str, 'person');

if ($z != null) {
echo $new_str."\n*ずらした文字は ".$i;
}
}

 

①.アルファベットにはアルゴリズムあるから、先ず使用する文字に着目するべきだね

$match_index = strpos($char, $c);//暗号文一文字一文字がアルファベットでの位置

②.①をもとに暗号文を1から30までずらす

$c = $char{($match_index + $i) % $char_length};

 ③.1回ずつの②の文に"person"含むかどうかを調べる

 $new_str.= $c;
}
$z = strpos($new_str, 'person');

④."person"を含んでいたら答えである

 if ($z != null) {
echo $new_str."\n*ずらした文字は ".$i;
}