Здравствуйте. Помогите пожалуйста. Задана следующая задача. Написать программу выполняющую шифрование и дешифрование слов. В шифре каждое слово шифруется отдельно. Рассмотрим шифрование на примере слов, состоящих только из строчных латинских букв. В начале, каждая буква заменяется соответствующим ей числом: a на 0, b на 1, c на 2, ..., z на 25. После этого к первому числу добавляется 5, ко второму числу добавляется первое число, к третьему - второе и т.д. После этого если какое-то число превосходит 25, то оно заменяется остатком от деления этого числа на 26. И, наконец, числа обратно заменяются буквами. Зашифруем слово SECRET: Шаг 0 S E C R E T Шаг 1 18 4 2 17 4 19 Шаг 2 23 27 29 46 50 69 Шаг 3 23 1 3 20 24 17 Шаг 4 X B D U Y R В итоге получилось слово XBDUYR. Шифрование выполняется, а вот с дешифрованием проблемы. Не могу сообразить как.Вот код <?php if( isset($_REQUEST['string1']) && !empty($_REQUEST['string1']) ) { $string1 = $_REQUEST['string1']; $word = strtok($string1, " "); while ($word) { echo "Введенное слово: $word <br />"; echo "Зашифрованное слово: "; $len = strlen($word); $c1 = 5; $c2 = ""; for ($i=0; ($i<$len); $i++): { $b = substr($word, $i, 1); $c1 = $c1 + (ord($b) - ord('A')); $c1 = $c1 % 26; $c2 = chr($c1 + ord('A')); echo $c2; } endfor; echo "<br />"; $word = strtok(" "); } } else echo "Вы не ввели строку текста!"; ?> <form action="/laba_0.php" method="post"> <table border="1"> <tr> Шифрование текста </tr> <tr> <td><label for="text">Введите строку текста, подлежащую шифрованию</label></td> <td><input name="string1" type="text" value=""/></td> </tr><br /> <tr><td><button type="submit">ГОТОВО!</button></td></tr><br /> </table> </form>
не, боюсь моск сломать. а так если тока за денежку то можно организовать. я так думаю, что надо дешифровать с первой буквы, но хз, возможно ли вобще это сделать при такой схеме =)
Щаг один Первое число Если меньше 5 значит число равно 26 + число Если больше или равно 5 то это и есть число 23 = 23 Второе число Если первое + второе число число больше 26 то делим сумму первого и второго на 26 отбрасываем дробь оставляем целое. если меньше присваиваем 1 (26 + 1) / 26 = 1 26 умножаем на целое из пункта 1 и прибавляем само число 26 х 1 + 1 = 27 Остальные по аналогии Шаг второй А вот тут надо идти с конца Шестое число минус пятое 69 – 50 = 19 И так далее. Первое число тупо минус 5. Два главных аспекта это Первое число имеет четкие границы не даром там делалось +5 тобишь найти 1 число очень легко ибо если это а то на выходе оно будет 0+5 = 5 … тобишь все что меньше это остаток от деления но край это 30 25+5 .. и того 26 + 4 Ну и второй момент это что второй шаг надо начинать с конца . Я уже уже засыпаю код писать мне не под силу и если вдруг что не очень понятно объяснил сорри. Но задача была интересная люблю помыслить.
В переменную $word нужно поместить слово для шифрования Тогда в $sword будет результат шифрования, которое в свою очередь будет служить словом для дешифрования В $rword должен получиться результат дешифровки Если исходное слово и результат дешифровки не совпадают, то выводится ошибка. В алгоритме не уверен, так что нужно протестировать на разных словах PHP: $word='ALABAMA'; echo "<br>$word-to cipher<br>"; $a[0 ]='A'; $a[1 ]='B'; $a[2 ]='C'; $a[3 ]='D'; $a[4 ]='E'; $a[5 ]='F'; $a[6 ]='G'; $a[7 ]='H'; $a[8 ]='I'; $a[9 ]='J'; $a[10]='K'; $a[11]='L'; $a[12]='M'; $a[13]='N'; $a[14]='O'; $a[15]='P'; $a[16]='Q'; $a[17]='R'; $a[18]='S'; $a[19]='T'; $a[20]='U'; $a[21]='V'; $a[22]='W'; $a[23]='X'; $a[24]='Y'; $a[25]='Z'; $b['A']=0 ; $b['B']=1 ; $b['C']=2 ; $b['D']=3 ; $b['E']=4 ; $b['F']=5 ; $b['G']=6 ; $b['H']=7 ; $b['I']=8 ; $b['J']=9 ; $b['K']=10; $b['L']=11; $b['M']=12; $b['N']=13; $b['O']=14; $b['P']=15; $b['Q']=16; $b['R']=17; $b['S']=18; $b['T']=19; $b['U']=20; $b['V']=21; $b['W']=22; $b['X']=23; $b['Y']=24; $b['Z']=25; ///процесс шифрования $n=strlen($word); $s=array(); $s1=array(); $s2=array(); $sword=''; for($i=0;$i<$n;$i++) { $s[$i]=substr($word,$i,1); $s1[$i]=$b[$s[$i]]; if($i==0) { $s2[$i]= $s1[$i]+5; } else { $s2[$i]=$s2[$i-1]+$s1[$i]; } $s3[$i]=$s2[$i]%26; $s4[$i]=$a[$s3[$i]]; // echo $s4[$i]; $sword.=$s4[$i]; } echo "<br>$sword-to decipher<br>"; //процесс дешифрования $n=strlen($sword); $d=array(); $d1=array(); $d2=array(); $d3=array(); $rword=''; for($i=0;$i<$n;$i++) { $d[$i]=substr($sword,$i,1); $d3[$i]=$b[$d[$i]]; if($i==0) { if(($d3[$i]-5)>=0) { $d2[$i]=$d3[$i]; } else { $d2[$i]=$d3[$i]-5+26; } $d1[$i]=$d2[$i]-5 ; } else { $d2[$i]=$d3[$i]; while($d2[$i]<$d2[$i-1]) { $d2[$i]=$d2[$i]+26; } $d1[$i]=$d2[$i]-$d2[$i-1]; } $rword.=$a[$d1[$i]]; } echo "<br>$rword-result word<br>"; if($word!=$rword) { echo "<br>error<br>"; }