Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.53/19: Рейтинг темы: голосов - 19, средняя оценка - 4.53
BTOOOM
2 / 2 / 0
Регистрация: 22.02.2013
Сообщений: 26
1

Написать программы шифрования и расшифровки файла методом циклического сдвига

22.02.2013, 10:25. Просмотров 3567. Ответов 6
Метки нет (Все метки)

Написать программы шифрования и расшифровки файла методом циклического сдвига. Т.е. каждый символ исходного файла (исходный код - K1) заменяется на символ с ascii-кодом K2 измененным на одну и ту же величину Delta (K2 = K1 + Delta). Причем, если в результате сдвига получается код K1 > 255 на величину Delta1 = 255 - K1 - Delta больше чем 255, то получаем символ с кодом Delta1.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2013, 10:25
Ответы с готовыми решениями:

Как закодировать методом циклического сдвига?
Здравствуйте! Вопрос такой, что представляет из себя кодировка методом...

Реализовать функции шифровки и дешифровки методом циклического сдвига битов
Даны текстовые файлы. Реализовать функции шифровки и дешифровки методом...

Ошиба циклического сдвига
Вот задание. Дана действительная квадратная матрица порядка n. 1) осуществить...

Функция циклического сдвига побитово вправо
Форумчане, приветствую! Подскажите почему не работает сдвиг вправо? Программа...

Программа циклического сдвига элементов массива
Помогите!Срочно! Составить программу циклического сдвига элементов массива...

6
Пaтрик
426 / 394 / 132
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
22.02.2013, 10:27 2
Что не получается?
0
BTOOOM
2 / 2 / 0
Регистрация: 22.02.2013
Сообщений: 26
22.02.2013, 10:43  [ТС] 3
ЧТО-ТО НЕТ((((((
0
Пaтрик
426 / 394 / 132
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
22.02.2013, 10:51 4
BTOOOM, что именно не получается?
0
BTOOOM
2 / 2 / 0
Регистрация: 22.02.2013
Сообщений: 26
22.02.2013, 10:57  [ТС] 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include <iostream>
#include <conio.h>
#include <fstream>
#include <cstring>
#include <stdio.h>
#include <windows.h>
 
using namespace std;
/*------key1 - ключ. пароль///filename1[30] - имя файла на входе
filename2[30] - имя файла на выходе///k1 - длина ключа
coding1,2,3 - переменные для преобразования исходного символа*/
int main()
{
    FILE *fp1, *fp2, *fp3, *fp4;//объявляем потоки
    char filename1[30], filename2[30],key1[20];
    int n=0,m=0,k1;
    unsigned char code=0;
    int temp;
    int coding1, coding2, coding3, coding4, z;
    cout << "1 - Зашифровать файл.\n" << "2 - расшифровать файл\n";
    cin >> z;
    if(z==1)
    {
       cout << "Введите пароль для шифрования: ";
       cin >> key1;
       cout << "key = " << key1;
       cout << "\nВведите имя файла для шифрования: ";
       cin >> filename1;
       k1 = strlen(key1);//обработка ключа
       cout << "k1 = " << k1 << endl;
       for(int i=0;i<k1;i++)
       {
            code = (code + key1[i]);
       } 
       // m - вычисляется из ключа сложением по модулю 2^6
       for(int i=1;i<k1;i++)
       {
            m = (key1[i-1] + key1[i])%64;
       }
       cout << "m = " << m << endl;
       /*отрывает входной файл только для 
       чтения в бинарном режиме*/
       fp1 = fopen(filename1, "rb");
       if (!fp1)
       {
          cout << "Ошибка открытия файла\n";
          getch();
          exit(1);
       }
       cout << "\nВведите имя зашифрованного файла: ";
       cin >> filename2;
       /*открываем новый файл для записи
       в бинарном режиме*/
       fp2 = fopen(filename2, "wb");
       if (!fp2)
       {
          cout << "Ошибка открытия файла\n";
          getch();
          exit(1);
       }
       for(int i = 0;i<16;i++)
        {
       while((temp = getc(fp1)) != EOF)
       {
          //инвертируем биты
          coding1 = ~temp;
          //Исключающее ИЛИ
          coding2 = coding1^code;
          //Сложение
          coding3 = coding2 + code;
          //Исключающее ИЛИ с m
          coding4 = coding3^m;
 
          putc(coding4,fp2);
       };
       }
       fclose(fp1);
       fclose(fp2);
    }
    else
    {
        cout << "Введите пароль для расшифровки: ";
        cin >> key1;
        cout << "\nkey = " << key1;
        k1 = strlen(key1);
        cout << "\nk1 = " << k1 << endl;
        for(int i=0;i<k1;i++)
        {
            code = (code + key1[i]);
        } 
        for(int i=1;i<k1;i++)
        {
            m = (key1[i-1] + key1[i])%64;
        }
        cout << "m = " << m << endl;
        cout << "\nВведите имя файла для расшифрования: ";
        cin >> filename1;
        fp3 = fopen(filename1, "rb");
        if (!fp3)
        {
        cout << "Ошибка открытия файла\n";
        getch();
        exit(1);
        }
        cout << "\nВведите имя рашифрованного файла: ";
        cin >> filename2;
        fp4 = fopen(filename2, "wb");
        if (!fp4)
        {
           cout << "Ошибка открытия файла\n";
           getch();
           exit(1);
        }
        /*Запускаем цикл шифрования 16 раз*/
        for(int i = 0;i<16;i++)
        {
           while((temp = getc(fp3)) != EOF)
           {
               coding1 = temp^m;
               coding2 = coding1 - code;
               coding3 = coding2^code;
               coding4 = ~coding3;
               putc(coding4,fp4);
           };
        }
        fclose(fp3);
        fclose(fp4);
    }
    cout << "END\n";
    MessageBox(NULL, "END", "END", MB_OK);
    getch();
    return 0;
}
Добавлено через 1 минуту
ВОТ ТАК?????

Добавлено через 17 секунд
ВОТ ТАК?????
0
windows98a
0 / 0 / 0
Регистрация: 13.06.2013
Сообщений: 2
04.07.2013, 09:57 6
Неплохой пример шифрования ,есть и циклический сдвигl
0
Thinker
Эксперт С++
4233 / 2207 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
04.07.2013, 10:24 7
иногда заявления типа
надежная криптосистема с открытым кодом на C++
откровенно поражают в безграмотности создателей таких "надежных криптосистем". Проверка на тесты NIST разве дает многое... А как же проверка на подверженность криптоанализу (линейный, дифференциальный, алгебраический и т.д.). Со временем, даже в гос.стандартах находят прорехи, несмотря на изначальные многолетние исследования. Для некоторых некогда популярных хеш-функций со временем все же удается построить коллизии и отмирают такие хеш-функции. а тут
надежная криптосистема...
вот кого хотел рассмешить автор такого заявления...
0
04.07.2013, 10:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.07.2013, 10:24

программа для шифрования и расшифровки текстовых файлов
программа для шифрования и расшифровки текстовых файлов.

Матрицы: определить номера строк, совпадающих полностью или в результате циклического сдвига
Элементами целочисленной матрицы являются 0 или 1. Определить: - номера строк,...

Вывести результат последовательного применения циклического сдвига вправо заданной последовательности k раз
Циклическим сдвигом вправо последовательности называется последовательность,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru