Вопросы по скрипту для шифровки и дешифровки шифра Цезаря.
Вот сам скрипт:
<html> <head> <title>Шифр Цезаря</title> </head> <body> <br> <div align="center"> <b>Введите сюда Ваш текст:</b> <br><br> <input id="b_text1" type="text" size="80"> <br><br><br> <b>Выберите действие:</b> <br><br> <input onclick="caesar_code(0)" type="button" value="Шифровать"> <input onclick="caesar_code(1)" type="button" value="Дешифровать"> <br><br><br> <b>Результат:</b> <br><br> <input id="b_text2" type="text" size="80"> </div> <script language="JavaScript"> function caesar_code(b_n) { var b_alf = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ', b_result = '', b_x = b_text1.value, b_u =b_text1.value.toUpperCase(); if (b_n == 0) { for(i = 0; i < b_x.length; i++) { b_pos = b_alf.lastIndexOf(b_u.charAt(i)); b_char1 = b_alf.charAt(b_pos +7); b_result = b_result + b_char1 } } if (b_n == 1) { for(i = 0; i < b_x.length; i = i+2) { b_pos = b_alf.indexOf(b_u.charAt(i)); b_result = b_result + b_alf.charAt(b_pos - 7); } } b_text2.value = b_result; } </script> </html> У меня два вопроса: 1) Почему скрипт дешифрует только один символ? 2) Как реализовать цикличность, т.е если алфавит заканчивается то скрипт начинает "брать" алфавит сначало. |
andrewvas,
У вас нет проверки существуетли b_pos +7 или b_pos - 7 плюс i = i+2 в строке 25, нужно i++. |
спасибо)
Если я выполняю проверку и b_pos+7(b_pos-7) не существует то..? |
andrewvas,
примерно так if(b_pos+7>b_alf.length) b_pos-=b_alf.length; if(b_pos-7<0) b_pos+=b_alf.length; |
ок спасибо)
только куда это вставить?) P.S b_pos-=b_alf.length; это тоже самое что b_pos=b_pos-b_alf.length; ? |
andrewvas,
Вариант с возможностью добавления любых символов для шифрования с возможностью выбора любого положительного сдвига, плюс если символ "нешифруемый" он остаётся таким же(регистр по прежнему верхний, но его можно убрать если добавить символы нижнего регистра)... <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1251"> <title>Шифр Цезаря</title> <script type="text/javascript"> function caesar_code(a, d) { var c = document.getElementById("b_text1"), g = document.getElementById("b_text2"), b = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ", e = "", d = d % b.length || 0, c = c.value.toUpperCase(), f = b.substr(d) + b.substr(0, d); 1 == a && (a = b, b = f, f = a); for (i = 0; i < c.length; i++) a = b.lastIndexOf(c.charAt(i)), a = f.charAt(a) || c.charAt(i), e += a; g.value = e }; </script> </head> <body> <br> <div align="center"> <strong>Введите сюда Ваш текст:</strong><br> <br> <input id="b_text1" type="text" size="80"><br> <br> <br> <strong>Выберите действие:</strong><br> <br> <input onclick="caesar_code(0,7)" type="button" value="Шифровать"> <input onclick="caesar_code(1,7)" type="button" value="Дешифровать"> <br> <br> <br> <strong>Результат:</strong><br> <br> <input id="b_text2" type="text" size="80"> </div> </body> </html> |
Спасибо) А можно небольшие пояснения(в 12, 14 и последующих строках)? в том как скрипт работает) а то я не очень понял(
|
В 12 строке мы вычисляем сдвиг, тут если сдвиг больше 33, то по кругу будет.
В 14 сроке получаем набор символов со сдвигом. |
Так, а вот что делает код
a = f.charAt(a) || c.charAt(i);я так и не понял, почему к символам применяется ИЛИ, что оно даёт? |
Цитата:
|
Часовой пояс GMT +3, время: 03:53. |