Шифр Цезаря. В скрипте используется картика "dot.gif" - вместо нее можно взять любую однородную гифку, она будет использоваться для построения примитивных графиков.

  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
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Криптография - шифр Цезаря</title>
</head>
<body>
<form method="post">
Исходный текст:<br />
<textarea rows="10" cols="40" name="text">это текст который нужно зашифровать шифр цезаря один из древнейших шифров при шифровании каждый символ заменяется другим отстоящим от него в алфавите на фиксированное число позиций шифр цезаря можно классифицировать как шифр подстановки при более узкой классификации шифр простой замены</textarea><br />
Смещение: <input type="text" value="3" name="shift" /><br />
<input type="submit" name="go" value="Шифровать!" />
</form>
<?php
if(isset($_POST['go'])){
$text = $_POST['text'];
$alphabet = array('а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ь', 'ы', 'ъ', 'э', 'ю', 'я');
for($i=0; $i<count($alphabet); $i++){
$a = $i - $_POST['shift'];
$tmp[$alphabet[$i]] = $i;
if ($a<0) $a += count($alphabet);
$alphabet_new[$a] = $alphabet[$i];
}
$alphabet = $tmp;
// посчитаем частотность символов в исходном тексте
$strlen = strlen($text);
$letters = array();
$letters2 = array();
$letters3 = array();
for($i=0; $i<$strlen; $i++){
if(isset($letters[$text[$i]])){
$letters[$text[$i]]++;
}else{
$letters[$text[$i]]=1;
}
// Шифруем
if(in_array($text[$i], $alphabet_new)){
$cryptogram .= $alphabet_new[$alphabet[$text[$i]]];
// усовершествуем
$sdvig = ($i % (count($alphabet)));
$sdvig += $alphabet[$text[$i]];
if ($sdvig>count($alphabet)-1) $sdvig -= count($alphabet) - 1;
$cryptogram2 .= $alphabet_new[$sdvig];
}else{
$cryptogram .= $text[$i];
$cryptogram2 .= $text[$i];
}
}
for($i=0; $i<$strlen; $i++){
// считаем статистику для зашифрованного 1го и 2го
if(isset($letters2[$cryptogram[$i]])){
$letters2[$cryptogram[$i]]++;
}else{
$letters2[$cryptogram[$i]]=1;
}
if(isset($letters3[$cryptogram2[$i]])){
$letters3[$cryptogram2[$i]]++;
}else{
$letters3[$cryptogram2[$i]]=1;
}
}
// сортируем
arsort($letters);
$keys = array_keys($letters);
arsort($letters2);
$keys2 = array_keys($letters2);
arsort($letters3);
$keys3 = array_keys($letters3);
echo '<table><tr><td>';
echo '<br /><table>';
echo '<tr><td>Символ</td><td>Частота</td><td>Проценты</td></tr>';
for($i=0; $i<count($letters); $i++){
$procent = $letters[$keys[$i]]*100/$strlen;
$procent = substr($procent, 0, 4);
echo '<tr><td>'.$keys[$i].'</td><td>'.$letters[$keys[$i]].'</td><td><img src="dot.gif" border="0" width="'.($procent*10).'" height="10">'.$procent.'%</td></tr>';
}
echo '</table>';
echo '</td><td>';
echo '<b>Обычный:</b><br /><table>';
echo '<tr><td>Символ</td><td>Частота</td><td>Проценты</td></tr>';
for($i=0; $i<count($letters2); $i++){
$procent = $letters2[$keys2[$i]]*100/$strlen;
$procent = substr($procent, 0, 4);
echo '<tr><td>'.$keys2[$i].'</td><td>'.$letters2[$keys2[$i]].'</td><td><img src="dot.gif" border="0" width="'.($procent*10).'" height="10">'.$procent.'%</td></tr>';
}
echo '</table>';
echo '</td><td>';
echo '<b>Усовершенствованный:</b><br /><table>';
echo '<tr><td>Символ</td><td>Частота</td><td>Проценты</td></tr>';
for($i=0; $i<count($letters3); $i++){
$procent = $letters3[$keys3[$i]]*100/$strlen;
$procent = substr($procent, 0, 4);
echo '<tr><td>'.$keys3[$i].'</td><td>'.$letters3[$keys3[$i]].'</td><td><img src="dot.gif" border="0" width="'.($procent*10).'" height="10">'.$procent.'%</td></tr>';
}
echo '</table>';
echo '</td></tr></table>';
echo '<b>Всего символов в тексте: '.$strlen.'</b><br />';
// Шифруем
echo '<b>Зашифрованный текст:</b><br /><textarea rows="10" cols="40">';
echo $cryptogram;
echo '</textarea>';
echo '<br /><b>Зашифрованный улучшенно текст:</b><br /><textarea rows="10" cols="40">';
echo $cryptogram2;
echo '</textarea>';
}
?>
</body>
</html>