powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Шифр Гронсфельда
8 сообщений из 8, страница 1 из 1
Шифр Гронсфельда
    #39660351
Vvvv111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужно сделать так, чтобы если номер символа (encrypted_message[count]) при шифровке был больше 255 (ASCII кодировка) то шифровался по формуле:

Код: plaintext
encrypted_message[count]=encrypted_message[count]-224. 

П.с. у меня при получении числа символа больше 255, отсчет начинается с начала, и тогда нужна формула

Код: plaintext
encrypted_message[count]=encrypted_message[count]+32
,

но как реализовать это в коде не знаю.
Код: sql
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.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <iomanip>

using namespace std;

int main(){
    setlocale(0, "");
    int count, j;
    char key[20];
    char message[100];
    std::ifstream fin("E:\\message.txt", std::ios::in);
    if (fin.is_open()) {
        fin.getline(message, 50);
        fin.close();
    }
    printf("\nEnter Key:\t");
    fflush(stdin);
    scanf("%[^\n]s", key);
    int message_length = strlen(message), key_length = strlen(key);
    char temp_key[message_length], encrypted_message[message_length], decrypted_message[message_length];
    for (count = 0, j = 0; count < message_length; ++count, ++j) {
        if (j == key_length) {
            j = 0;
        }
        temp_key[count] = key[j];
    }
    temp_key[count] = '\0';
    count = 0;
    while (count < message_length) {
        encrypted_message[count] = ((message[count] + (temp_key[count] - 48)));
        count = count + 1;
    }
    for (int count = 0; count < message_length; count + 1)
        encrypted_message[count] = '\0';
    count = 0;
    while (count < message_length) {
        decrypted_message[count] = ((encrypted_message[count] - (temp_key[count] - 48)));
        count = count + 1;
    }
    decrypted_message[count] = '\0';
    printf("\n-------------------------------\n");
    printf("\nIntial String:\t%s", message);
    printf("\nKey:\t%s", key);
    printf("\nGenerated Key:\t%s", temp_key);
    printf("\nEncrypted Message:\t%s", encrypted_message);
    printf("\nDecrypted Message:\t%s", decrypted_message);
    return 0;
}
...
Рейтинг: 0 / 0
Шифр Гронсфельда
    #39660353
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vvvv111, я ничего не понял. Научитесь выражать мысль и писать читаемый код.
...
Рейтинг: 0 / 0
Шифр Гронсфельда
    #39660394
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vvvv111,

понятно, алфавит мощностью 224 (256 кодов из "полной" таблицы ASCII минус 32 "первых" непечатных символа).

Скажи, что вот это такое:
Код: plaintext
1.
temp_key[count]-48


Почему именно 48? Ты где-то взял этот код, "там так было"?
...
Ты учитываешь, что char - это знаковый тип? Ну, то, что коды от 0 до 127 - положительные, а остальные - отрицательные (обратный дополнительный код)?
...
Отформатируй код, пожалуйста, и подпиши в комментариях, что ты делаешь в каждом блоке, непонятно ибо.
...
Рейтинг: 0 / 0
Шифр Гронсфельда
    #39660474
Vvvv111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Котовасия, единице соответствует 49 код в ASCII кодировке, и для корректного ввода вычитаем 48, т.е. при вводе ключа 1 (49-48=1) к символьному коду буквы прибавляется 1, и так далее с другими цифрами
...
Рейтинг: 0 / 0
Шифр Гронсфельда
    #39660479
Vvvv111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот полная формулировка задания, может так понятнее будет.
Задание
Код: plaintext
Программа, шифрующая и дешифрующая обыкновенные текстовые ASCII файлы с помощью  усовершенствованного шифра Гронсфельда.

Указание:
Код: plaintext
1.
2.
3.
Шифр Гронсфельда имеет ключ - 5 (в нашем случае любое количество) цифр. Шифруемый текст разбивается на группы символов (пробелы - не исключение) по числу цифр в ключе. 
Код первого символа группы увеличивается на число, соответствующее первой цифре ключа, код второго на число, соответствующее второй цифре ключа и т.д.  
При этом коды меньше 32 (т.н. управляющие символы) преобразованию не  подлежат 
(во избежание повреждения структуры файла и других неприятных последствий). При де-шифровке производится обратный процесс (уменьшение кодов).

Если полученный при шифровании код КОД больше 255, применяем формулу КОД = КОД - 224.
Если полученный при дешифрировании код КОД меньше 32 применяем формулу КОД = КОД + 224.
Таким образом, зацикливаем последовательность кодов 32 - 255.
Естественно, при шифровке и дешифровке программа должна запраши-вать у пользователя ключ.
...
Рейтинг: 0 / 0
Шифр Гронсфельда
    #39660487
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vvvv111Вот полная формулировка задания, может так понятнее будет.

Главная непонятка в том какое место из этого очень простого задания у тебя вызывает
затруднение.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Шифр Гронсфельда
    #39660517
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vvvv111Вот полная формулировка задания, может так понятнее будет.
Программа, шифрующая и дешифрующая обыкновенные текстовые ASCII файлы с помощью усовершенствованного шифра Гронсфельда.
Указание: Шифр Гронсфельда имеет ключ - 5 (в нашем случае любое количество) цифр. Шифруемый текст разбивается на группы символов (про-белы - не исключение) по числу цифр в ключе. Код первого символа группы увеличивается на число, соответствующее первой цифре ключа, код второго на число, соответствующее второй цифре ключа и т.д. При этом коды меньше 32 (т.н. управляющие символы) преобразованию не подлежат (во избежание повреждения структуры файла и других неприятных последствий). При де-шифровке производится обратный процесс (уменьшение кодов).
Если полученный при шифровании код КОД больше 255, применяем формулу КОД = КОД - 224.
Если полученный при дешифрировании код КОД меньше 32 применяем формулу КОД = КОД + 224.
Таким образом, зацикливаем последовательность кодов 32 - 255.
Естественно, при шифровке и дешифровке программа должна запраши-вать у пользователя ключ.
Я надеюсь ты не пишешь весь свой код спложной простыней без отступов. Обрати на это внимание.
Пришлось отформатировать за тебя.

По коду. Подобного рода утилиты удобно разрабатывать через TDD. Тоесть ты сначала пишешь набор тестов.
Вбиваешь в них константы которые ты заведомом знаешь либо они пришли из ТЗ. И далее пишешь код таким
образом чтобы эти тесты стали инвариантом по отношению к твоему коду. Работу с файлами нужно временно
выкинуть. И добавить ее в самом последнем этапе когда модульные тесты вошли в зеленый сектор. После
этого софт готов.

Почему это важно? Поясню. Если ты где-то напортачил с форматным выводом или вводом в файл - у тебя в коде
будет комплексная ошибка и тебе сложно будет понять на какой фазе она возникла. В дешифровании или
в чтении файла.
...
Рейтинг: 0 / 0
Шифр Гронсфельда
    #39660524
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут даже я впал бы в ступор...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Шифр Гронсфельда
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]