Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> шифрование методом тритемиуса, помогите 
:(
    Опции темы
Kroshkka
Дата 3.12.2013, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 3.12.2013

Репутация: нет
Всего: нет



помогите, не могу разобраться
Код

//Программа шифрования/дешифрования символов латиницы
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <conio.h>
#include <fstream>
#include <clocale>
#include <cmath>

using namespace std;
 
int main()
    {
        int km=1,sm=1; //Переменная выбора - шифрование/дешифрование
        int a, b, c, i;
        string str;
        string key;
        setlocale(LC_ALL,"Russian");
      while(sm) {
        string result = ""; //Строка - результат
        cout<<"0-Выход\n";
        cout<<"***********************\n";
        cout<<" Шифрование методом Третемиуса:\n";
        cout<<"1-Шифрование\n";
        cout<<"2-Дешифрование\n";
        cout<<"***********************\n";
       // putc('\n',stdout);
        cout<<"Введите операцию: ";
        cin>>km;
        switch (km) //Если km
        {
        case 0: {exit(1);}
      
        case 1:        //Шифрование
            {
            cout<<"Введите ключи для шифрования: "<<"a= ";
            //alph();
            cin>>a;
            cout<<"b= ";
            cin>>b;
            cout<<"c= ";
            cin>>c;
            int L=(a*(int)(str[i])*(int)(str[i]) + b*(int)(str[i]) + c); //Величина сдвига
            key=L;
            //putc('\n',stdout);
            if (L > 31)
                L = L % 31; //Вычисление сдвига
            /////////////////////////////////////////////////////////////////////////////////////////////
            cout<<"Имя файла:";
            string filename;
            cin>>filename;
            cout<<"Чтение файла...\n";//Чтение файла
            string str; //Строка считанная из файла
            ifstream in(filename);
            /////////////////////////////////////////////////////////////////////////////////////////////
            getline(in,str);
            cout<<"Текст файла: \n"<<str<<endl;
            key=str;
            //str=shift;
            in.close();
           // putc('\n',stdout);
            cout<<"Шифрование...\n";
            for (int i = 0; i < str.length(); i++)
                {
                 //Если  латиница
                    if (((int)(str[i]) < -64)||((int)(str[i]) > -1))
                        result += str[i];
                    //Если буква является строчной
                    if (((int)(str[i]) >= -32) && ((int)(str[i]) <= -1))
                        {
                            //Если буква, после сдвига выходит за пределы алфавита
                            if ((int)(str[i]) + L > -1)
                                //Добавление в строку результатов символ
                                result += (char)((int)(str[i]) + L - 31);
                            //Если буква может быть сдвинута в пределах алфавита
                            else
                                //Добавление в строку результатов символ
                                result += (char)((int)(str[i]) + L);
                        }
                     //Если буква является прописной
                     if (((int)(str[i]) >= -64) && ((int)(str[i]) <= -33))
                        {
                            //Если буква, после сдвига выходит за пределы алфавита
                            if ((int)(str[i]) + L > -33)
                                //Добавление в строку результатов символ
                                result += (char)((int)(str[i]) + L - 31);
                            //Если буква может быть сдвинута в пределах алфавита
                            else
                                //Добавление в строку результатов символ
                                result += (char)((int)(str[i]) + L);
                        }
                }
            cout<<"Результат:\n";
            cout<<result; //Вывод результата
            /////////////////////////////////////////////////////////////////////////////////////////////
            ofstream out("OUT.txt");
            out << result << endl;
            cout<<"\nСохранено в OUT.txt";
            out.close();
            /////////////////////////////////////////////////////////////////////////////////////////////
            break;
            }
        case 2:       //Дешифрование
            {
               cout<<"Введите ключи для шифрования: "<<"a= ";
            //alph();
            cin>>a;
            cout<<"b= ";
            cin>>b;
            cout<<"c= ";
            cin>>c;
            int L=a*(int)(str[i])+b*(int)(str[i])+c;
            //putc('\n',stdout);
            if (L > 31)
                L = L % 31;
            cout<<"Имя файла:";
            /////////////////////////////////////////////////////////////////////////////////////////////
            string filename;
            cin>>filename;
            cout<<"Чтение файла...\n";//Чтение файла
            string str; //Строка считанная из файла
            ifstream in(filename);
            /////////////////////////////////////////////////////////////////////////////////////////////
            getline(in,str);
            cout<<"Текст файла: \n"<<str<<endl;
            in.close();
            //putc('\n',stdout);
            cout<<"Дешифрование...\n";
            for (int i = 0; i < str.length(); i++)
                {
                //Если  латиница
                    if (((int)(str[i]) < -64)||((int)(str[i]) > -1))
                        result += str[i];
                    //Если буква является строчной
                    if (((int)(str[i]) >= -32) && ((int)(str[i]) <= -1))
                        {
                            //Если буква, после сдвига выходит за пределы алфавита
                            if ((int)(str[i]) - L < -32)
                                //Добавление в строку результатов символ
                                result += (char)((int)(str[i]) - L + 31);
                            //Если буква может быть сдвинута в пределах алфавита
                            else
                                //Добавление в строку результатов символ
                                result += (char)((int)(str[i]) - L);
                        }
                     //Если буква является прописной
                     if (((int)(str[i]) >= -64) && ((int)(str[i]) <= -33))
                        {
                            //Если буква, после сдвига выходит за пределы алфавита
                            if ((int)(str[i]) - L < -64)
                                //Добавление в строку результатов символ
                                result += (char)((int)(str[i]) - L + 31);
                            //Если буква может быть сдвинута в пределах алфавита
                            else
                                //Добавление в строку результатов символ
                                result += (char)((int)(str[i]) - L);
                        }
                }
            cout<<"Результат:\n";
            cout<<result; //Вывод результата
            /////////////////////////////////////////////////////////////////////////////////////////////
            ofstream out("OUT.txt");
            out << result << endl;
            cout<<"\nСохранено в OUT.txt";
            out.close();
            /////////////////////////////////////////////////////////////////////////////////////////////
            break;
            }
       
           default: //Если ошибочное значение
            {
            cout<<"Ошибка->";
            break;
            }
        }
        getch();
        system("cls");
      }
        return 0;
    }




PM MAIL   Вверх
bsa
Дата 4.12.2013, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



код сама писала?
Цитата(Kroshkka @  3.12.2013,  21:58 Найти цитируемый пост)
помогите, не могу разобраться
в чем?
PM   Вверх
smalcom
Дата 4.12.2013, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 494
Регистрация: 16.10.2004
Где: Dnepr

Репутация: нет
Всего: 7





--------------------
What DA F...???
PM MAIL WWW Skype Jabber   Вверх
Kroshkka
Дата 4.12.2013, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 3.12.2013

Репутация: нет
Всего: нет



Цитата(smalcom @ 4.12.2013,  19:17)
не сама http://cybern.ru/cezar-cpp.html

писала не сама. почти разобралась 
PM MAIL   Вверх
Kroshkka
Дата 4.12.2013, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 3.12.2013

Репутация: нет
Всего: нет



Цитата(bsa @ 4.12.2013,  11:05)
код сама писала?
Цитата(Kroshkka @  3.12.2013,  21:58 Найти цитируемый пост)
помогите, не могу разобраться
в чем?

 дешифровка проходит со сдвигом вперед, а не назад. что не так делаю?
Код

 case 1:        //Шифрование
            {
            cout<<"Имя файла:";
            string filename;
            cin>>filename;
            cout<<"Чтение файла...\n";//Чтение файла
            string str; //Строка считанная из файла
            ifstream in(filename);
            /////////////////////////////////////////////////////////////////////////////////////////////
            getline(in,str);
            cout<<"Текст файла: \n"<<str<<endl;
            key=str;
            in.close();
            cout<<"Шифрование...\n";
            for (int i = 0; i < str.length(); i++) //перебор букв шифруемого слова
               {  
                  k=a*i+b;
                    //Если не латиница
                    if (((int)(str[i]) < 65)||((int)(str[i]) > 122))
                        result += str[i];
                    //Если буква является строчной
                    if (((int)(str[i]) >= 97) && ((int)(str[i]) <= 122))
                       { shift=(((int)(str[i])-96)+k)%26;
                    
                            //Если буква, после сдвига выходит за пределы алфавита
                            if ((int)(str[i]) + shift > 122)
                                //Добавление в строку результатов символ
                                result += (char)((int)(str[i]) + shift - 26);
                            //Если буква может быть сдвинута в пределах алфавита
                            else
                                //Добавление в строку результатов символ
                                result += (char)((int)(str[i]) + shift);
                        }
                     //Если буква является прописной
                     if (((int)(str[i]) >= 65) && ((int)(str[i]) <= 90))
                        {shift=(((int)(str[i])-64)+k)%26;
                            //Если буква, после сдвига выходит за пределы алфавита
                            if ((int)(str[i]) + shift-i > 90)
                                //Добавление в строку результатов символ
                                result += (char)((int)(str[i]) + shift - 26);
                            //Если буква может быть сдвинута в пределах алфавита
                            else
                                //Добавление в строку результатов символ
                                result += (char)((int)(str[i]) + shift);
                        }
                     cout<<"k="<<k<<" shift="<<shift<<endl;
                }
            cout<<"Результат:\n";
            cout<<result; //Вывод результата
            /////////////////////////////////////////////////////////////////////////////////////////////
            ofstream out("OUT.txt");
            out << result << endl;
            cout<<"\nСохранено в OUT.txt";
            out.close();
            /////////////////////////////////////////////////////////////////////////////////////////////
            break;
            }
         case 2:       //Дешифрование
            {
           cout<<"Имя файла:";
            /////////////////////////////////////////////////////////////////////////////////////////////
            string filename;
            cin>>filename;
            cout<<"Чтение файла...\n";//Чтение файла
            string str; //Строка считанная из файла
            ifstream in(filename);
            /////////////////////////////////////////////////////////////////////////////////////////////
            getline(in,str);
            cout<<"Текст файла: \n"<<str<<endl;
            in.close();
            cout<<"Дешифрование...\n";
            for (int i = 0; i < str.length(); i++)
                {
                 k=a*i+b;
                 
                //Если не латиница
                    if (((int)(str[i]) < 65)||((int)(str[i]) > 122))
                        result += str[i];
                    //Если буква является строчной
                    if (((int)(str[i]) >= 97) && ((int)(str[i]) <= 122))
                        {  shift=(((int)(str[i])-96)+k)%26;
                            //Если буква, после сдвига выходит за пределы алфавита
                            if ((int)(str[i]) - shift < 97)
                                //Добавление в строку результатов символ
                                result += (char)((int)(str[i]) - shift + 26);
                            //Если буква может быть сдвинута в пределах алфавита
                            else
                                //Добавление в строку результатов символ
                                result += (char)((int)(str[i]) - shift);
                        }
                     //Если буква является прописной
                     if (((int)(str[i]) >= 65) && ((int)(str[i]) <= 90))
                        {   shift=(((int)(str[i])-64)+k)%26;
                            //Если буква, после сдвига выходит за пределы алфавита
                            if ((int)(str[i]) - shift < 65)
                                //Добавление в строку результатов символ
                                result += (char)((int)(str[i]) - shift + 26);
                            //Если буква может быть сдвинута в пределах алфавита
                            else
                                //Добавление в строку результатов символ
                                result += (char)((int)(str[i]) - shift);
                        }
                      cout<<"k="<<k<<" shift="<<shift<<endl;
                }
            cout<<"Результат:\n";
            cout<<result; //Вывод результата
            /////////////////////////////////////////////////////////////////////////////////////////////
            ofstream out("OUT.txt");
            out << result << endl;
            cout<<"\nСохранено в OUT.txt";
            out.close();
            /////////////////////////////////////////////////////////////////////////////////////////////
            break;
            }

PM MAIL   Вверх
smalcom
Дата 5.12.2013, 01:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 494
Регистрация: 16.10.2004
Где: Dnepr

Репутация: нет
Всего: 7



вероятно суть в этом
Цитата

+ shift



--------------------
What DA F...???
PM MAIL WWW Skype Jabber   Вверх
Kroshkka
Дата 5.12.2013, 06:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 3.12.2013

Репутация: нет
Всего: нет



Цитата(smalcom @ 5.12.2013,  01:06)
вероятно суть в этом
Цитата

+ shift

но в дешифровании везде
Цитата

- shift

PM MAIL   Вверх
Objegog
Дата 7.9.2022, 06:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 6.9.2022

Репутация: нет
Всего: нет




Модератор: Сообщение скрыто.

PM MAIL   Вверх
hipAppops
Дата 10.9.2022, 04:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 9.9.2022

Репутация: нет
Всего: нет




Модератор: Сообщение скрыто.

PM MAIL   Вверх
anceria
Дата 13.9.2022, 06:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 12.9.2022

Репутация: нет
Всего: нет




Модератор: Сообщение скрыто.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1605 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.