Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Войти
 
Страницы: 1
RSS
помогите найти error в коде расшифровки
 
Не получается расшифровать сообщение:
Код
 ДАЙРБСБЪЧОФСБЩДЙЬГЫЧНГЭЗЙУТТЭЖЮФХКЪЧДЭПКСТЙУЧЧАТПЭИПВЦЗРГСЯМ ОЬЙРАЦВСМНЭСЩБТГОЙОВЙЫФРРЪМФЛХБЫТЕ 

Известно, что в сообщение есть слово:
Код
ВОЗДУХ

Зашифрованное следующим алгоритмом: используется русский алфавит А-Я (кроме Ё). А-0, Б-1, В-3... ключ из 3-х букв. Шифруется так, например ключ будет ЛОЛ (т.е. 11 14 11) нужно зашифровать строку "АБВГД", делается это так А=11(Л)+0(А)=Л, Б=14(О)+1(Б)=П, В=11(Л)+2(В)=Н, Г=11(Л)+3(Г)=О, Д=14(О)+4(Д)=Т получается "ЛПНОТ". Т.е. к каждой букве сообщения прибаляется буква ключа по порядку.
Не могу найти никак ошибку в коде, при расшифровке выдается не то что нужно... вот код:
Код
<?php
//задаем массив сообщения
$kod =  array(Д,А,Й,Р,Б,С,Б,Ъ,Ч,О,Ф,С,Б,Щ,Д,Й,Ь,Г,Ы,Ч,Н,Г,Э,З,Й,У,Т, Т,Э,Ж,Ю,Ф,Х,К,Ъ,Ч,Д,Э,П,К,С,Т,Й,У,Ч,Ч,А,Т,П,Э,И,П,В,Ц,З,Р,Г, С,Я,М,О,Ь,Й,Р,А,Ц,В,С,М,Н,Э,С,Щ,Б,Т,Г,О,Й,О,В,Й,Ы,Ф,Р,Р,Ъ,М, Ф,Л,Х,Б,Ы,Т,Е);
//задаем массив вспомогательного слова
$slovo = array(В,О,З,Д,У,Х);
//задаем массив алфавита
$alf = array();
foreach(range(А, Я) as $letter) 
{
&nbsp;&nbsp;&nbsp;&nbsp;array_push($alf,$letter);
}
//переделываем буквы зашифрованного сообщения в цифры
$kod_ch = array();
$kol = count($kod);
for($i=0; $i <=$kol; $i++)
{
 $zn_buk = array_search("$kod[$i]",$alf);
 array_push($kod_ch,$zn_buk);
}
//переводим вспомогательное слово в код
$kod_sl = array();
$kolsl = count($slovo);
for($i=0; $i <=$kolsl; $i++)
{
 $zn_buk = array_search("$slovo[$i]",$alf);
 array_push($kod_sl,$zn_buk);
}
//ищем ключ, находя вспогательное слово в коде сообщения
$kolch = count($kod_ch);
for($i=0; $i <($kolch-6); $i++)
&nbsp;&nbsp;&nbsp;{if(($kod_ch[$i]-$kod_ch[($i+3)])==($kod_sl[0]-$kod_sl[3]))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(($kod_ch[($i+1)]-$kod_ch[($i+4)])==($kod_sl[1]-$kod_sl[4]))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  {if(($kod_ch[($i+2)]-$kod_ch[($i+5)])==($kod_sl[2]-$kod_sl[5]))
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  {
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; $slovo_in = array();
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; for ($l=$i; $l <($i+6); $l++)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  {
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; array_push($ slovo_in,$kod_ch[$l]);
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;  $key = array();
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; for($f=0; $f <3; $f++)
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$zn = ($slovo_in[$f]-$kod_sl[($f)])%30;
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$zn = abs($zn);
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array_push($key,$zn);
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo $alf[$key[$f]].</br>;
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}  
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  }
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;}
//дешифруем сообщение с помощью найденого ключа
$isxod = array();
$lol = count($kod_ch);
for($i=0;$i< $lol; $i++)
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;for($t=0; $t<3; $t++)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $cg = abs(($kod_ch[$i+$t]-$key[$t])%30);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; array_push($isxod,$cg);  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;$i=$i+2;
&nbsp;&nbsp;&nbsp;&nbsp;}
  //вывводим зашифрованное сообщение
for($i=0; $i < count($isxod); $i++)
{
echo $alf[$isxod[$i]];
}
?>

предположительно ошибка в дешифровке сообщения (в организации цикла), когда ключ уже найден.
Плс ХЕЛП!!! Замучился уже... :)
 
что будет в случае: я + ь?
ь?
 
2 xPow
Да. Я(30) + Ь(26) берем по модулю 30 (алфавит из 30 символов) = Ь(26)

PS. Исправил, поставил по модулю 30 (не помогло)
 
ошибка где-то тут
Код
//дешифруем сообщение с помощью найденого ключа 
$isxod = array(); 
$lol = count($kod_ch); 
for($i=0;$i< $lol; $i++) 
&nbsp;&nbsp;&nbsp;{ 
&nbsp;&nbsp;&nbsp;for($t=0; $t<3; $t++) 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $cg = abs(($kod_ch[$i+$t]-$key[$t])%30); 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; array_push($isxod,$cg); 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} 
&nbsp;&nbsp;&nbsp;&nbsp;$i=$i+2; 
&nbsp;&nbsp;&nbsp;&nbsp;} 

т.к. ключ находится правильно - 100%
 
1) что будет если А - А?
2) какой код пробела?
3)
Код
$cg = abs(($kod_ch[$i+$t]-$key[$t])%30);

здесь надо не модуль брать, а символ от конца алфавита
 
ВСЕОТНЯЛУМЕНЯКЗНЯЩИЙБОГЗДОРОВЬЕСИЛУВОЛИВОЗДУХСОНОДНУТЕБЯПРИМ­ НЕОСТВИЛОНЧТОБЯЕМУЕЩЕМОЛИЮЬСЯМОГС

гг
надо делать относительно позиции, где нашел ключик.
т.к. он не с самого начала начинается ;)
 
а-а-а-а!!! =))))
Точно!
гы гы спасибо, душевное! :)
Страницы: 1
Читают тему