Форум программистов, компьютерный форум CyberForum.ru

Посимвольное считывание из файла - C++

Восстановить пароль Регистрация
 
Арслан
0 / 0 / 0
Регистрация: 17.06.2012
Сообщений: 4
30.05.2013, 20:23     Посимвольное считывание из файла #1
Добрый вечер уважаемые формучане. Помогите найти ошибку в коде программы, реализующей алгоритм Вермана. При запуске виснет вся среда.

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
#include "iostream"
#include "fstream"
#include "string.h"
#include "stdlib.h"
#include "stdio.h"
#include <time.h>
using namespace std;
 
int main(){
FILE*f1=fopen("message.txt", "rb");
FILE*f2=fopen("key.txt","wb");
srand(time(NULL));
rewind(f1);
while (!feof(f1)){
   char s=rand()%255;
   fputc(s,f2);
 
}
fclose(f1);
fclose(f2);
fopen("message.txt","r");
FILE*f3=fopen("encrMessage.txt","w");
while(!feof(f1)){
    char m=fgetc(f1);
    char k=fgetc(f2);
    fputc(m^k,f3);
}
fclose(f3);
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2013, 20:23     Посимвольное считывание из файла
Посмотрите здесь:

C++ считывание с файла
считывание с файла... C++
считывание из файла C++
C++ Посимвольное считывание из файла в массив int
C++ Посимвольное считывание из файла
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.05.2013, 20:51     Посимвольное считывание из файла #2
C++
1
2
3
4
while (!feof(f1)){
   char s=rand()%255;
   fputc(s,f2);
}
Пишите символы в f2, проверяете конец файла в f1?
Арслан
0 / 0 / 0
Регистрация: 17.06.2012
Сообщений: 4
30.05.2013, 20:58  [ТС]     Посимвольное считывание из файла #3
Цитата Сообщение от alsav22 Посмотреть сообщение
C++
1
2
3
4
while (!feof(f1)){
   char s=rand()%255;
   fputc(s,f2);
}
Пишите символы в f2, проверяете конец файла в f1?
Ой, простите, совсем запутался в них, спасибо за подсказку)
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.05.2013, 21:04     Посимвольное считывание из файла #4
Как-то так:
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
#include "iostream"
#include "fstream"
#include "string.h"
#include "stdlib.h"
#include "stdio.h"
#include <time.h>
using namespace std;
 
int main(){
int n = 10;
FILE*f1=fopen("message.txt", "rb");
if (f1 == NULL) printf("Error!");
else
{
FILE*f2=fopen("key.txt","wb");
srand(time(NULL));
//rewind(f1);
int i = 0;
while (i < n)
{
   char s = rand()%255;
   fputc(s, f2);
   i++;
}
//fclose(f1);
fclose(f2);
//fopen("message.txt","r");
FILE*f3=fopen("encrMessage.txt","w");
while(!feof(f1))
{
    char m=fgetc(f1);
    char k=fgetc(f2);
    fputc(m^k,f3);
}
fclose(f3);
fclose(f1);
}
 
system("pause");    
return 0;
}
Арслан
0 / 0 / 0
Регистрация: 17.06.2012
Сообщений: 4
30.05.2013, 21:11  [ТС]     Посимвольное считывание из файла #5
Цитата Сообщение от alsav22 Посмотреть сообщение
Как-то так:
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
#include "iostream"
#include "fstream"
#include "string.h"
#include "stdlib.h"
#include "stdio.h"
#include <time.h>
using namespace std;
 
int main(){
int n = 10;
FILE*f1=fopen("message.txt", "rb");
if (f1 == NULL) printf("Error!");
else
{
FILE*f2=fopen("key.txt","wb");
srand(time(NULL));
//rewind(f1);
int i = 0;
while (i < n)
{
   char s = rand()%255;
   fputc(s, f2);
   i++;
}
//fclose(f1);
fclose(f2);
//fopen("message.txt","r");
FILE*f3=fopen("encrMessage.txt","w");
while(!feof(f1))
{
    char m=fgetc(f1);
    char k=fgetc(f2);
    fputc(m^k,f3);
}
fclose(f3);
fclose(f1);
}
 
system("pause");    
return 0;
}
Спасибо за введенные вами усовершенствования, но шифр Вернама предполагает длину ключа, равную длине файла, а вы заполнили его 10 случайными числами.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.05.2013, 21:16     Посимвольное считывание из файла #6
Цитата Сообщение от Арслан Посмотреть сообщение
Спасибо за введенные вами усовершенствования, но шифр Вернама предполагает длину ключа, равную длине файла, а вы заполнили его 10 случайными числами.
Мне совершенно не интересно, что предполагает шифр Вернама. Я же не случайно написал: "как-то так". Мне главное было указать ошибки кода, а не алгоритма. Остальное - дело автора кода.
Или как-то так:
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
#include "iostream"
#include "fstream"
#include "string.h"
#include "stdlib.h"
#include "stdio.h"
#include <time.h>
using namespace std;
 
int main(){
FILE*f1=fopen("message.txt", "rb");
if (f1 == NULL) printf("Error!");
else
{
// перемотать на конец файла
fseek(f1, 0, SEEK_END);
 // получить размер файла
int n = ftell(f1);
// перейти на начало файла
fseek (f1 , 0, SEEK_SET);
 
FILE*f2=fopen("key.txt","wb");
srand(time(NULL));
 
int i = 0;
while (i < n)
{
   char s = rand()%255;
   fputc(s, f2);
   i++;
}
fclose(f2);
 
FILE*f3=fopen("encrMessage.txt","w");
while(!feof(f1))
{
    char m=fgetc(f1);
    char k=fgetc(f2);
    fputc(m^k,f3);
}
fclose(f3);
fclose(f1);
}
 
system("pause");    
return 0;
}
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
30.05.2013, 21:46     Посимвольное считывание из файла #7
Цитата Сообщение от Арслан Посмотреть сообщение
шифр Вернама предполагает длину ключа, равную длине файла
Не путайте шифр Вернама с шифром табличного (модульного) гаммирования. В шифре Вернама НЕТ ограничений на длину ПЕРВИЧНОГО ключа. СОСТАВНОЙ ключ получается периодическим применением первичного ключа.
Арслан
0 / 0 / 0
Регистрация: 17.06.2012
Сообщений: 4
30.05.2013, 22:11  [ТС]     Посимвольное считывание из файла #8
Цитата Сообщение от Thinker Посмотреть сообщение
Не путайте шифр Вернама с шифром табличного (модульного) гаммирования. В шифре Вернама НЕТ ограничений на длину ПЕРВИЧНОГО ключа. СОСТАВНОЙ ключ получается периодическим применением первичного ключа.
Свойства ключа для алгоритма Вернама:
1. быть истинно случайным;
2. совпадать по размеру с заданным открытым текстом;
3. применяться только один раз.

Простите, но если будет использоваться составной ключ, то будут нарушатся 1 и 2 свойства ключа. Ширф Вернама является поточным, а не блочным алгоритмом, в котором ключ проходит множество раундов шифрования.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2013, 22:21     Посимвольное считывание из файла
Еще ссылки по теме:

C++ посимвольное считывание
C++ Посимвольное чтение из файла
C++ Считывание с файла

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

Или воспользуйтесь поиском по форуму:
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
30.05.2013, 22:21     Посимвольное считывание из файла #9
Цитата Сообщение от Арслан Посмотреть сообщение
Свойства ключа для алгоритма Вернама:
1. быть истинно случайным;
2. совпадать по размеру с заданным открытым текстом;
3. применяться только один раз.

Простите, но если будет использоваться составной ключ, то будут нарушатся 1 и 2 свойства ключа. Ширф Вернама является поточным, а не блочным алгоритмом, в котором ключ проходит множество раундов шифрования.

Не по теме:

Извиняюсь, спутал с шифром Виженера. Да, Вы правы

Yandex
Объявления
30.05.2013, 22:21     Посимвольное считывание из файла
Ответ Создать тему
Опции темы

Текущее время: 06:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru