0 / 0 / 0
Регистрация: 13.05.2016
Сообщений: 10
1

Шифрования и расшифровывание сообщения по битам

13.05.2016, 23:48. Показов 1351. Ответов 5

Author24 — интернет-сервис помощи студентам
Реализовать функцию зашифровывания полученное сообщение по битам, например "Мама мыла раму", необходимо передавать бит каждого символа по три раза. Затем необходимо создать функцию помех, которая будет повреждать некоторые биты. После чего необходимо расшифровать полученную последовательность битов и получить исходное сообщение.(нельзя использовать классы и объекты, так как я их еще не изучал)
Моя реализация данной программы(на Visual studio 2013):
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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
#define I 3
void deshifr(char*buff,char*sout)
{
    int k = 0;
    for (int i = 0; buff[i]; i += 3)
    {
        int one = 0, zero = 0;
        for (int j = i; j<i + 3; j++)
            if (buff[j] == '1')
                one++;
            else
                zero++;
 
        if (zero>one)
            sout[k] = '0';
        else
            sout[k] = '1';
 
        k++;
    }
    sout[k] = 0;
    return;
}
void pomeh(char *mas, int pom, int kolvo)
{
    for (int i = 0; i < pom; i++)
    {
        int r = rand() % kolvo;
        if (mas[r] == '1')
            mas[r] = '0';
        else
            mas[r] = '1';
    }
    return;
}
int GetFromFile(char*Data)
{
    FILE * f = fopen("Data.txt", "r");
    const int S = 7;
    const int M = 1 << S;
    int j=0;
    char Byte,Bit;
    while (!feof(f))
    {
 
        Byte = fgetc(f);
        
        {
            for (int i = 1; i <= S + 1; i++)
            {
                Bit = (Byte & M ? '1' : '0');
                Byte <<= 1;
                for (int k = 0; k < I; k++)
                {
                    Data[j] = Bit;
                    j++;
                }
            }
        }
    }
    Data[j] = 0;
    fclose(f);
    return j;
}
void output(char*sout,int kolvo)
{
    FILE * fout = fopen("DataP.txt", "w");
    char character=0;
    for (int i = 0; i < kolvo;)
    {
        for (int j = 7; j >= 0; j--)
        {
            character += pow(2, j)*(sout[i++]-'0');
        }
        fputc(character, fout);
        character = 0;
    }
    fclose(fout);
    return;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    char Data[10000];
    char DataP[10000];
    
    int count = GetFromFile(Data);
 
    
    pomeh(Data, 0, count);
    
    deshifr(Data, DataP);
    
    output(DataP, count / 3);
 
    system("pause");
    return 0;
}
Проблема в том, что при чтении сообщения из файла в массив попадает и символ 'н'(EOF).
Так же не отказался бы от совета по улучшению роботы программы(может я че-то не так сделал и она не всегда будет работать).
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.05.2016, 23:48
Ответы с готовыми решениями:

Шифрования заданного сообщения М с использованием алгоритма RSA
Помогите с задачей пожалуйста, есть недочеты .Шифрования заданного сообщения М с использованием...

Метод шифрования на основе перестановок байтов в пределах сообщения
Нужен рабочий пример! Метод шифрования предусматривает реализацию двух этапов: инициализации и...

Написать программу, реализующую алгоритм шифрования и дешифрования сообщения RSA
Помогите написать программу, реализующую алгоритм шифрования и дешифрования сообщения RSA. Входные...

Напишите программу шифрования текстового сообщения.
помогите пожалуйста,очень надо,плиззззззз.... Задачка на записи. 1) Из множества латинских ...

5
7790 / 6557 / 2984
Регистрация: 14.04.2014
Сообщений: 28,667
14.05.2016, 08:49 2
Лучший ответ Сообщение было отмечено BlackInWhite как решение

Решение

feof() сработает только после первого неудачного чтения.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    int Byte;
    char Bit;
    while ((Byte = fgetc(f)) != EOF)
    {
            for (int i = 1; i <= S + 1; i++)
            {
                Bit = (Byte & M ? '1' : '0');
                Byte <<= 1;
                for (int k = 0; k < I; k++)
                {
                    Data[j] = Bit;
                    j++;
                }
            }
    }
1
0 / 0 / 0
Регистрация: 13.05.2016
Сообщений: 10
14.05.2016, 23:31  [ТС] 3
Теперь возникла другая проблема, когда вводишь сообщение вроде:"Шляпа" выведет "Шл". Т.к. 'я' и ЕОФ - одно и тоже.
0
7790 / 6557 / 2984
Регистрация: 14.04.2014
Сообщений: 28,667
15.05.2016, 11:00 4
Ты внимательно мой пример рассмотрел? Думаешь, почему у меня Byte типа int?
0
0 / 0 / 0
Регистрация: 13.05.2016
Сообщений: 10
15.05.2016, 12:03  [ТС] 5
Спасибо, все работает. Ток не совсем понял почем с char не работает, а с инт работает.
0
7790 / 6557 / 2984
Регистрация: 14.04.2014
Сообщений: 28,667
15.05.2016, 15:37 6
Потому что EOF вне диапазона char. fgetc() не просто так int возвращает.
0
15.05.2016, 15:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.05.2016, 15:37
Помогаю со студенческими работами здесь

Составьте программу шифрования текстового сообщения
Составьте программу шифрования текстового сообщения. Использовать простейший способ шифрования, при...

Написать программу шифрования текста сообщения
Написать программу шифрования текста сообщения,вставляя после каждой гласной буквы слог &quot;ва&quot;...

Составьте программу шифрования текстового сообщения
Составьте программу шифрования текстового сообщения. Можно использовать такой способ шифрования....

Прокомментировать код программы шифрования сообщения магическим квадратом
Здравствуйте, нужна очень помощь. Есть код программы шифрования сообщения магическим квадратом,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru