Алгоритм Цезаря.

Тема в разделе "WASM.BEGINNERS", создана пользователем wilds, 15 фев 2008.

  1. wilds

    wilds New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2008
    Сообщения:
    9
    У кого есть программа, которая шифрует и дешифрует текст с помошью алгоритма Цезаря, на языке с++. Заранее спасибо.
     
  2. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    А что не получается? :)
     
  3. wilds

    wilds New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2008
    Сообщения:
    9
    Ваще нече в голову не приходит....как аллгоритм организовать.


    Возможно у кого-то завалялась написанная программа. Поделитесь пожалуйста.
     
  4. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    wilds
    Если мне не изменяет память, работа алгоритма заключается в следующем:
    Код (Text):
    1. void encode(char *buff, int len, int shift) {
    2. for (int i=0; i<len; i++) buff[i] += shift;
    3. }
    4.  
    5. void decode(char *buff, int len, int shift) {
    6. for (int i=0; i<len; i++) buff[i] -= shift;
    7. }
    Не совсем корректно конечно (нужно нормировать по интервалу алфавита), но работать будет.

    Что сложного?
     
  5. wilds

    wilds New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2008
    Сообщения:
    9
    Я так понял, len это длина кодируемой строки....как ее можно задать автоматически? Т.к текст очень большой для кодирования.
     
  6. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    wilds
    Как хорошо, что компиляторы умеют оптимизировать такие вещи :derisive:
    Код (Text):
    1. for(int t=0;t<size;t++)
    2. buf[t] = NULL;
    В твоем примере длина строки равна m-1.
     
  7. wilds

    wilds New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2008
    Сообщения:
    9
    Спасибо, все получилось....
     
  8. wilds

    wilds New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2008
    Сообщения:
    9
    Кто может помочь, вобщем почти все как в цезаре, есть форуме F=a*p+b; Где а- это число на которое умножаем текст, р - сам текст, b-число на которое здвигаем. Мне немного не понятно,допустим у нас есть символ русская буква а, если ее умножить на 2, то что выйдет?
     
  9. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Код русской буквы а=0xE0. Соотв. если 0xE0 умножить на 2 получим 0xC0. Но 0xC0/2 != 0xE0, так что обратно не выйдет раскодировать, если размер под букву равен 1 байту.
     
  10. wilds

    wilds New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2008
    Сообщения:
    9
    Ну зачем тогда придумали такой аллгоритм? Или может препод ошибся?
     
  11. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    wilds
    Но, скажем, если алфавит состоит только из русских букв, то вполне можно установить соответствие. Если умножение не больше чем на 4.
     
  12. wilds

    wilds New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2008
    Сообщения:
    9
    А как мне не вылезти за рамки алфавита? Какую лутче сделать проверку?
     
  13. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    wilds
    "Полутце" объясните что надо. Какую проверку какого алфавита?
     
  14. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    аффтар,
    Возми первую и последнюю букву алфавита и попробуй кодировать обе методом цезаря... )))
    Медетируй...
     
  15. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    тю блин. есле не получаецо считать комп методами (мало ли там какие непреодолимые задачи возникаюд:)) ), то делоете просто два олфавита, первый - оригинальный, второй - расчитанный вручную.
    типа того(не проверял)
    Код (Text):
    1. char* alph1="abcde....xyz";
    2. char* alph2="cdefg....zab";
    3.  
    4. void encode(char*str1,char*str2,len)
    5. {for(DWORD i=0; i <len;i++)str2[i]=alph2[(DWORD)StrChr(&alph1,str1[i])-(DWORD)&alph1];}
    в расшифровщеке поменять алфавиты местами.
    думаю принцип понятен.
     
  16. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Freeman
    Это называется - метод прямой замены;)