Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Шифр Цезаря, Проблема с дешифровкой
sh3lla  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 1
Пользователь №: 42551
На форуме: 1 год, 3 месяца, 10 дней
Карма:




Всем привет, я новичок в php, и иногда пытаюсь писать некоторые программки. В этот раз выбрал шифр Цезаря ( это шифр, в котором каждый символ в тексте заменяется символом, находящимся на некотором постоянном числе позиций левее или правее него в алфавите; например, в шифре со сдвигом вправо на 3, А была бы заменена на Г, Б станет Д, и так далее). Прога должна была шифровать и дешифровать слова, но возникла проблемка при дешифрации. Например, если взять букву "А" и дешифровать со сдвигом в 1 шаг, т.е. должна появится буква "Z" - всплывает ошибка. Т.е. массив не просматривается заново, а останавливается на букве "А".
<!DOCTYPE html>
<html>
<head>
<meta
http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>
Шифр Цезаря</title>
<link
href="Style.css" rel="stylesheet">
</head>
<body>
<div
class="body">
<div
class="sa">
<form
action='fail6.php' method='POST'>
<H1
align="center">Введите слово, для шифрования/дешифрования!</H1>
<div
class="1" align="center">
<i>
Сообщение может содержать только буквы английского алфавита*</i><br><br>
<input
type='text' name='text' size=100>
<H1
align="center">Введите количество шагов, для сдвига!</H1>
<i>
Доступны только числа в диапазоне от 1 до 25*</i><br><br>
<input
type='number' name='number' min='1' max='25'><br><br>
<input
type='Submit' value='Зашифровать' name='but'>
<input
type='Submit' value='Расшифровать' name='but2'>
</div>
</div>
</div>
</form>

</body>
</html>

<?php
if(isset($_POST['but']))
{
$name=$_POST['text'];
$num=$_POST['number'];

if(preg_match ('@[A-z]@u',$name) and preg_match ('/[0-9]/',$num))
{

$X=strtoupper($_POST['text']); //Преобразует строку в верхний регистр
$alph=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');
$N=count($alph);//Считает кол-во букв
$b="";
$n=strlen($X); //Возвращает длину строки

for($i=0;$i<$n;$i++)
for($j=0;$j<$N;$j++)
{
if($X[$i]==$alph[$j])
{
$b= $b . $alph[ ($j+$num) % $N];
}
}


print "Зашифрованное слово:\t". $b ;
}
else {
print "Не правильное слово для кодирования! ";
}
}

if(isset($_POST['but2']))
{
$name=$_POST['text'];
$num=$_POST['number'];

if(preg_match ('@[A-z]@u',$name) and preg_match ('/[0-9]/',$num))
{

$X=strtoupper($_POST['text']); //Преобразует строку в верхний регистр
$alph=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');
$N=count($alph);//Считает кол-во букв
$b="";
$n=strlen($X); //Возвращает длину строки

for($i=0;$i<$n;$i++)
for($j=0;$j<$N;$j++)
{
if($X[$i]==$alph[$j])
{
$b= $b . $alph[ ($j-$num) % $N];
}
}


print "Расшифрованное слово:\t". $b ;
}
else {
print "Не правильное слово для кодирования! ";
}
}

?>
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



c начала 2017 года в Новосибирске.
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26383
Пользователь №: 21350
На форуме: 7 лет, 2 месяца, 15 дней
Карма: 737




ну ты сам подумай)
после Z То ничего нет в алфавите, так же как и перед A

у тебя и проверки нет на позицию буквы.

что вообще подразумевает твой алгоритм когда буквы кончаются?

тут 2 вариант я вижу

1. сдвиг по рекурсии - т.е. снова по началу алфавита шуршать
2. если дошел до края (позиция буквы + сдвиг) - менять направления сдвига


--------------------
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql (TSql, BI OLAP, MDX), Git, SVN, CodeIgnater, Yii 2, JiRA, Redmine, Bitbucket, Composer
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса