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

Считать информацию из одного файла, кодировать во второй и декодировать в третий - C++

Восстановить пароль Регистрация
 
solomid
1 / 1 / 0
Регистрация: 22.09.2011
Сообщений: 86
31.10.2011, 20:02     Считать информацию из одного файла, кодировать во второй и декодировать в третий #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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include "stdafx.h"
#include <iostream>
using namespace std;
typedef unsigned int uint32_t;
 
void encrypt(unsigned int num_rounds, uint32_t *v, uint32_t const *k) {
    unsigned int i;
    uint32_t v0=v[0], v1=v[1], sum=0, delta=0x9E3779B9;
    for (i=0; i < num_rounds; i++) {
        v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]);
        sum += delta;
        v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]);
    }
    v[0]=v0; v[1]=v1;
}
void decrypt(unsigned int num_rounds, uint32_t *v, uint32_t const *k) {
    unsigned int i;
    uint32_t v0=v[0], v1=v[1], delta=0x9E3779B9, sum=delta*num_rounds;
    for (i=0; i < num_rounds; i++) {
        v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]);
        sum -= delta;
        v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]);
    }
    v[0]=v0; v[1]=v1;
}
int main()
{
    setlocale(LC_ALL,"rus");
    FILE *f;FILE *f2;
    f=fopen("1.txt","rb");
    f2 = fopen("2.txt","rb");
    while(!feof(f))
    {
        
    }
    /*uint32_t v[ 2 ] = { 0xBADDFACE, 0xacccdfac };
    uint32_t k[ 8 ] = {  1010101010,
                         1010101010,
                         1010101010,
                         1010101010,
                         1010101010,
                         1010101010,
                         1010101010,
                         1010101010
                       };
    cout << "Текст: " << hex << v[ 0 ] << " " << v[ 1 ] << endl;
    encrypt( 32, v, k );
    cout << "Зашифррованный текст: " << hex << v[ 0 ] << " " << v[ 1 ] << endl;
    decrypt( 32, v, k );
    cout << "Расшифрованный текст: " << hex << v[ 0 ] << " " << v[ 1 ] << endl;*/
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2011, 20:02     Считать информацию из одного файла, кодировать во второй и декодировать в третий
Посмотрите здесь:

C++ Не получается считать информацию из файла в 2-х мерный массив (С++)
C++ Считать каждый второй символ из файла
getline() (не получается считать информацию с файла) C++
Как считать информацию с файла C++
Как считать информацию с текстового файла? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
01.11.2011, 18:52     Считать информацию из одного файла, кодировать во второй и декодировать в третий #2
solomid, как я понял вы хотите использовать ifstream и ofstream потоки, как пример привожу вам работу с ifstream Указатель на файловый поток в качестве параметра функции
Кроме прямого извлечения данных из потока существуют специальные методы write и read, которіе позволяют записывать/считывать в/из файл целый текстовый блок, поля структур(ы) и т.д. По свободе подлатаю Ваш алгоритм, сразу скажу что о шифровании TEA не наслышан, поэтому правильность encrypt на ваших плечах. Если к тому времени как появится время никто не поможет выложу код сюда в топик

Добавлено через 3 минуты
PS:
Цитата Сообщение от solomid Посмотреть сообщение
FILE *f;FILE *f2;
* * * * f=fopen("1.txt","rb");
* * * * f2 = fopen("2.txt","rb");
- всмотревшись вижу вы хотите Си доступ к файлам организовать, что ж сути это не поменяет. Вообщем подождите немножко я вами в хорошем смысле єтого слова займусь

Добавлено через 8 часов 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
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
#include <iostream>
#include <cstdlib>
using namespace std;
 
//ГђГіГ±Г±ГЁГґГЁГЄГ*öèÿ
ostream& operator<<(ostream &stream,char* s){
        for(char* ps=s; *ps; ps++){
                if(*ps=='Вё')
                        stream<<char(241);
                else if(*ps=='ВЁ')
                        stream<<char(240);
                else if(*ps>=-64 && *ps<=-17)                   
                        stream<<char(*ps+64+128);
                else if(*ps<0)
                        stream<<char(*ps+64+176);
                else
                        stream<<*ps;
        }
        return stream;
}
 
typedef unsigned int uint32_t;
 
void encrypt(unsigned int num_rounds, uint32_t *v, uint32_t const *k) {
    unsigned int i;
    uint32_t v0=v[0], v1=v[1], sum=0, delta=0x9E3779B9;
    for (i=0; i < num_rounds; i++) {
        v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]);
        sum += delta;
        v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]);
    }
    v[0]=v0; v[1]=v1;
}
void decrypt(unsigned int num_rounds, uint32_t *v, uint32_t const *k) {
    unsigned int i;
    uint32_t v0=v[0], v1=v[1], delta=0x9E3779B9, sum=delta*num_rounds;
    for (i=0; i < num_rounds; i++) {
        v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]);
        sum -= delta;
        v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]);
    }
    v[0]=v0; v[1]=v1;
}
 
int main()
{
    setlocale(LC_ALL,"rus");
 
    uint32_t v[ 2 ] /*= { 0xBADDFACE, 0xacccdfac }*/;
    FILE * f = fopen("text.txt","r");
    fscanf(f,"%X%X",&v[0],&v[1]);
    fclose(f);
    uint32_t k[ 8 ] = {  1010101010,
                         1010101010,
                         1010101010,
                         1010101010,
                         1010101010,
                         1010101010,
                         1010101010,
                         1010101010
                       };
    cout << "Г’ГҐГЄГ±ГІ: " << hex << v[ 0 ] << " " << v[ 1 ] << endl;
    encrypt( 32, v, k );
    cout << "Г‡Г*øèôððîâГ*Г*Г*ûé ГІГҐГЄГ±ГІ: " << hex << v[ 0 ] << " " << v[ 1 ] << endl;
    decrypt( 32, v, k );
    cout << "ГђГ*ñøèôðîâГ*Г*Г*ûé ГІГҐГЄГ±ГІ: " << hex << v[ 0 ] << " " << v[ 1 ] << endl;
}
text.txt
0xBADDFACE 0xacccdfac


Цитата Сообщение от solomid Посмотреть сообщение
uint32_t k[ 8 ] = { *1010101010,
* * * * * * * * * * * * *1010101010,
* * * * * * * * * * * * *1010101010,
* * * * * * * * * * * * *1010101010,
* * * * * * * * * * * * *1010101010,
* * * * * * * * * * * * *1010101010,
* * * * * * * * * * * * *1010101010,
* * * * * * * * * * * * *1010101010
* * * * * * * * * * * *};
- как я понимаю это что-то вроде ключа алгоритма, так зачем его закоментили?

Добавлено через 2 минуты
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
setlocale(LC_ALL,"rus");
- на старье это не работает, рекомендую
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
//Руссификация
ostream& operator<<(ostream &stream,char* s){
* * * * for(char* ps=s; *ps; ps++){
* * * * * * * * if(*ps=='ё')
* * * * * * * * * * * * stream<<char(241);
* * * * * * * * else if(*ps=='Ё')
* * * * * * * * * * * * stream<<char(240);
* * * * * * * * else if(*ps>=-64 && *ps<=-17) * * * * * * * * *
* * * * * * * * * * * * stream<<char(*ps+64+128);
* * * * * * * * else if(*ps<0)
* * * * * * * * * * * * stream<<char(*ps+64+176);
* * * * * * * * else
* * * * * * * * * * * * stream<<*ps;
* * * * }
* * * * return stream;
}
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
fscanf(f,"%X%X",&v[0],&v[1]);
- просто сканируе hex-ы из файла, если в файл нужно поместить и это
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
uint32_t k[ 8 ] = { *1010101010,
* * * * * * * * * * * * *1010101010,
* * * * * * * * * * * * *1010101010,
* * * * * * * * * * * * *1010101010,
* * * * * * * * * * * * *1010101010,
* * * * * * * * * * * * *1010101010,
* * * * * * * * * * * * *1010101010,
* * * * * * * * * * * * *1010101010
* * * * * * * * * * * *};
, то могу доработать, просто конкретно запишите что в файлах записано и тогда подгоню программу под данные файлов
solomid
1 / 1 / 0
Регистрация: 22.09.2011
Сообщений: 86
01.11.2011, 20:31  [ТС]     Считать информацию из одного файла, кодировать во второй и декодировать в третий #3
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- как я понимаю это что-то вроде ключа алгоритма, так зачем его закоментили?
да, это ключ для шифрования, а закоментил по глупости

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
если в файл нужно поместить и это
нет,ключ имеется в теле программы,так нормально
а как сделать чтобы в файле мог содержаться любой текст и без ограничений? т.е. не только определенное количество блоков с 16-ным кодом? это вобще возможно

Добавлено через 33 минуты
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
просто конкретно запишите что в файлах записано и тогда подгоню программу под данные файлов
Правильнее вот так,из первого файла считывает исходный текст, во второй записывает закодированый текст, и в третий уже раскодированый из второго

Добавлено через 51 минуту
вот что типа такого но только это не коректно работает, а именно считывает вроде бы все но записывает кодированый текст ограничено, т.е. 16 символов... и декодирует в файле не верно что-то...
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
uint32_t v[ 2 ];
        FILE * f = fopen("1.txt","r");
        fscanf(f,"%X%X",&v[0],&v[1]);
        fclose(f);
    uint32_t k[ 8 ] = {  1010101010,
                         1010101010,
                         1010101010,
                         1010101010,
                         1010101010,
                         1010101010,
                         1010101010,
                         1010101010
                       };
    FILE * f2 = fopen("2.txt","w");
    encrypt(32,v,k);
        fprintf(f2,"%X%X",v[0],v[1]);
    fclose(f2);
 
 
    f2 = fopen("2.txt","r");
    fscanf(f2,"%X%X",&v[0],&v[1]);
    
    FILE * f3 = fopen ("3.txt","w");
        decrypt(32,v,k);
    fprintf(f3,"%c%c",v[0],v[1]);
       fclose(f3);
-=ЮрА=-
Заблокирован
Автор FAQ
01.11.2011, 21:18     Считать информацию из одного файла, кодировать во второй и декодировать в третий #4

Не по теме:

Цитата Сообщение от solomid Посмотреть сообщение
а как сделать чтобы в файле мог содержаться любой текст и без ограничений? т.е. не только определенное количество блоков с 16-ным кодом? это вобще возможно
- да легкоСкоро отпишусь...



Добавлено через 28 минут
solomid, пробуй
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
int main()
{
    uint32_t v[2];
    uint32_t k[ 8 ] = {  1010101010,
                         1010101010,
                         1010101010,
                         1010101010,
                         1010101010,
                         1010101010,
                         1010101010,
                         1010101010
                       };
    FILE * f = fopen("text.txt","rb");
    while(!feof(f))
    {
        fscanf(f,"%X%X",&v[0],&v[1]);
        cout << "Текст: " << hex << v[ 0 ] << " " << v[ 1 ] << endl;
        encrypt( 32, v, k );
        cout << "Зашифррованный текст: " << hex << v[ 0 ] << " " << v[ 1 ] << endl;
        decrypt( 32, v, k );
        cout << "Расшифрованный текст: " << hex << v[ 0 ] << " " << v[ 1 ] << endl;
    }
    fclose(f);
    system("pause");
    return 0;
}
solomid
1 / 1 / 0
Регистрация: 22.09.2011
Сообщений: 86
01.11.2011, 22:24  [ТС]     Считать информацию из одного файла, кодировать во второй и декодировать в третий #5
все, то что нужно, спасибо
Yandex
Объявления
01.11.2011, 22:24     Считать информацию из одного файла, кодировать во второй и декодировать в третий
Ответ Создать тему
Опции темы

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