<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Криптография - шифр Зорге</title>
</head>
<body>
<form method="post">
Ключ: <input name="key" type="text" value="SUBWAY"/><br />
Анаграмма: <input name="anagramma" type="text" value="ASINTOER"/><br />
Номер страницы <input name="stranica" type="text" value="193" size="3"/> строка в таблице на этой странице <input name="stroka" type="text" value="7" size="1"/> номер колонки на странице <input name="kolonka" type="text" value="5" size="1"/><br />
Исходный текст:<br />
<textarea rows="10" cols="40" name="text">DAL.DER SOWJETISCHE FERNE OSTEN KANN ALS SICHER VOR EINEM ANGRIFF JAPANS ERACHTET WERDEN.RAMSAY</textarea><br />
Русский язык: <input type="checkbox" name="rus" value="ON"/><br />
<input type="submit" name="go" value="Шифровать!" />
</form>
<?php
ini_set('display_errors', '0');
error_reporting(0);
if(isset($_POST['go'])){
// получаем исходные данные
$text = strtolower($_POST['text']);
$key = strtolower($_POST['key']);//"SUBWAY";
$anagramma = strtolower($_POST['anagramma']); // асинтоер
$RUS = array('а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ь', 'ы', 'ъ', 'э', 'ю', 'я', '.', '/');
$ENG = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '.', '/');
if($_POST['rus']=='ON'){$ENG = $RUS;}
$stranica = $_POST['stranica'];
$stroka = $_POST['stroka'];
$kolonka = $_POST['kolonka'];
// получаем таблицы
$table_1 = array();
$table_1[] = $key;
for($i=0;$i<count($ENG);$i++){
if(strpos($key, $ENG[$i]) === false){
if($a<strlen($key)){
$a++;
}else{
$table_1[] = $tmp_text;
$a=1;
$tmp_text = '';
}
$tmp_text .= $ENG[$i];
}
}
if($a!=strlen($key)){
$table_1[] = $tmp_text;
$a=0;
$tmp_text = '';
}
echo "Таблица #1<br />";
echo "<table border=\"1\"><tr>";
for($i=0;$i<count($table_1);$i++){
for($a=0;$a<strlen($key);$a++){
if($table_1[$i][$a]=='') $z=' '; else $z=$table_1[$i][$a];
echo "<td>".$z."</td>\n";
}
if($i<count($table_1)-1) echo "</tr><tr>";
}
echo "</tr></table>";
// с какого числа начитать заполнение
$k=$kk=floor(10-(count($ENG)-strlen($anagramma))/10);
$b = 0;
$table_2 = array();
$table_2[] = "0123456789";
for($i=0;$i<strlen($key);$i++){
for($a=0;$a<count($table_1);$a++){
if(strpos($anagramma, $table_1[$a][$i]) !== false){
$table_2[1] .= $table_1[$a][$i];
}else{
if($b<10){
$b++;
}else{
$table_2[$k] = $tmp_text;
$k++;
$b=0;
$tmp_text = '';
}
$tmp_text .= $table_1[$a][$i];
}
}
}
if($b<10 && $b!=0){
$table_2[] = $tmp_text;
$b=0;
$tmp_text = '';
}
echo "<br /><br />Таблица #2<br />";
echo "<table border=\"1\"><tr>";
$table_2_keys = array_keys($table_2);
for($i=0;$i<count($table_2);$i++){
echo "<td>".($table_2_keys[$i]>2 ? $table_2_keys[$i] : " ")."</td>\n";
for($a=0;$a<10;$a++){
if($table_2[$table_2_keys[$i]][$a]=='') $z=' '; else $z=$table_2[$table_2_keys[$i]][$a];
echo "<td>".$z."</td>\n";
}
if($i<count($table_2)-1) echo "</tr><tr>";
}
echo "</tr></table><br />";
// преобразовываем текст
$text = str_replace(' ', '/', $text);
$tmp_text = '';
for($i=0;$i<strlen($text);$i++){
if(is_numeric($text[$i]) && !is_numeric($text[$i-1])){$tmp_text .= '/';}
$tmp_text .= $text[$i];
if(is_numeric($text[$i]) && !is_numeric($text[$i+1])){$tmp_text .= '/';}
}
$text = $tmp_text;
$tmp_text = '';
echo "Подготовленный для шифрования текст:<br />";
// шифруем
for($i=0;$i<strlen($text);$i++){
echo $char = $text[$i];
if(is_numeric($char)){
$cryptogram .= $char.$char;
continue;
}
if(strpos($table_2[1], $char) !== false){
$cryptogram .= strpos($table_2[1], $char);
continue;
}else{
for($a=$kk;$a<10;$a++){
if(strpos($table_2[$a], $char) !== false){
$cryptogram .= $a.strpos($table_2[$a], $char);
continue(2);
//break;
}
}
}
}
// дополняем нулями
while(strlen($cryptogram)% 5!=0){$cryptogram.='0';}
echo "<br />";
echo "Клер: ";
for($i=0;$i<strlen($cryptogram);$i++){
if(($i % 5)==0){echo ' ';}
echo $cryptogram[$i];
}
echo "<br />";
echo "Гамма: ";
for($i=0;$i<ceil(strlen($cryptogram) / 5);$i++){
$gamma .= rand(10000, 99999);
}
$gamma = substr($gamma, 0, strlen($cryptogram));
for($i=0;$i<strlen($gamma);$i++){
if(($i % 5)==0){echo ' ';}
echo $gamma[$i];
}
echo "<br />";
echo "Шифр: ";
for($i=0;$i<strlen($cryptogram);$i++){
$tmp_text .= ($cryptogram[$i] + $gamma[$i]) % 10;
}
$cryptogram = $tmp_text;
$tmp_text = '';
for($i=0;$i<strlen($cryptogram);$i++){
if(($i % 5)==0){echo ' ';}
echo $cryptogram[$i];
}
echo "<br />";
echo "Ключевая группа – индикатор: ";
$start = substr($cryptogram, 15, 5); //четвертая группа от начала криптограммы.
$end = substr($cryptogram, -15, 5); //третья группа от конца криптограммы.
$ssk = $stranica.$stroka.$kolonka;//страница/строка/колонка
for($i=0;$i<5;$i++){
$tmp_text .= ($start[$i] + $end[$i] + $ssk[$i]) % 10;
}
echo $tmp_text;
echo "<br />";
echo "Длина исходного: ".strlen($text)."<br />\n";
echo "Длина шифра: ".(strlen($cryptogram)+5)."<br />\n";
}
?>
</body>
</html>