Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 42, средняя оценка - 4.83
qwerty181
1 / 1 / 0
Регистрация: 03.01.2011
Сообщений: 5
#1

Открытие файла в бинарном режиме - C++

03.01.2011, 01:33. Просмотров 7193. Ответов 6
Метки нет (Все метки)

Помогите разобраться. Необходимо реализовать алгоритм шифрования AES128. Всё сделано, только шифруются не файлы, а ввожу в ручную 32 шестнадцатеричных числа. А необходимо шифровать файлы. Не знаю как считать данные в массив, состоящий из 128ми чисел (0 или 1), или в массив состоящий из 32х чисел (шестнадцатеричных).

C++
1
2
3
4
5
FILE *stream;
int block[128];
 
stream = fopen("file.txt", "rb");
fread((char *)block, 16, 1, stream);.
Что дальше я хз.
Надо 128 бит передать в массив. Помогите это сделать.
http://www.cyberforum.ru/cpp-beginners/thread1294585.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.01.2011, 01:33
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Открытие файла в бинарном режиме (C++):

Открытие файла в режиме HEX
Здравствуйте, подскажите пожалуйста способы открытия файла, так чтоб записать...

Запись char в бинарном режиме
Пишу в файл две структуры. struct ApRegFileHead { char *rHead; unsigned...

Запись в файл в бинарном режиме
Есть файл, 1.exe, как его открыть чтоб можно было записать в него свой hex код ?

Чтение строки в бинарном режиме
Необходимо прочитать файл .txt в бинарном режиме и записать в строку. ...

Работа с файлом в бинарном режиме
Всем здравствуйте. Нужна помощь или подсказка. Есть два файла размером до 200...

6
igorrr37
1863 / 1481 / 749
Регистрация: 21.12.2010
Сообщений: 2,473
Записей в блоге: 11
03.01.2011, 05:55 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream>
#include<fstream>
#define N 128
using namespace std;
 
int main()
{
    char c[N];
    short n[sizeof(c)];
    ifstream ifs("file.txt");
    ifs>>c;
    for(int i=0;i<sizeof(c);i++){
        n[i]=c[i]-48;
        cout<<n[i];
    }
}
0
qwerty181
1 / 1 / 0
Регистрация: 03.01.2011
Сообщений: 5
04.01.2011, 18:04  [ТС] #3
как я понимаю тут сразу весь файл передается в память, а можно по частям его открывать, использовать fopen а дальше fread. Файлы то большие могут быть.

igorrr37 уточните пожалуйста, в каком формате хранятся данные в массиве, точнее какие значения имеют числа хранящиеся в массиве? Как я понимаю здесь он не в бинарном режиме открывается.
0
igorrr37
1863 / 1481 / 749
Регистрация: 21.12.2010
Сообщений: 2,473
Записей в блоге: 11
04.01.2011, 19:34 #4
по частям - ф-ция read(), считывает без форматирования
http://www.cplusplus.com/reference/iostream/istream/read/
C++
1
2
3
4
5
6
7
8
9
10
#include<iostream>
#include<fstream>
using namespace std;
 
int main()
{
    char ch[128];
    ifstream ifs("file.txt", ios::binary);
    ifs.read(ch, 128);    //считать в ch 128 байт
}
0
qwerty181
1 / 1 / 0
Регистрация: 03.01.2011
Сообщений: 5
04.01.2011, 23:52  [ТС] #5
Цитата Сообщение от igorrr37 Посмотреть сообщение
по частям - ф-ция read(), считывает без форматирования
http://www.cplusplus.com/reference/iostream/istream/read/
C++
1
2
3
4
5
6
7
8
9
10
#include<iostream>
#include<fstream>
using namespace std;
 
int main()
{
    char ch[128];
    ifstream ifs("file.txt", ios::binary);
    ifs.read(ch, 128);    //считать в ch 128 байт
}

читать нужно по блокам 128бит, а не 128байт. А массив типа int, или как здесь char должен содержать биты информации. Т.е. 1 или 0.

char ch[128];

Здесь содержится символы. А как это перевести в двоичный режим?
0
igorrr37
1863 / 1481 / 749
Регистрация: 21.12.2010
Сообщений: 2,473
Записей в блоге: 11
05.01.2011, 06:19 #6
128 бит - 16 байт, а содержит он байты а не символы, просто при выводе на экран они расшифровываются как символы. Вот первый байт файла в 10чном виде
C++
1
2
3
4
5
6
7
8
9
10
11
#include<iostream>
#include<fstream>
using namespace std;
 
int main()
{
    char ch[16];
    ifstream ifs("file.txt", ios::binary);
    ifs.read(ch, 16);
    cout<<(int)ch[0];
}
а вот в 16 ричном
C++
1
2
3
4
5
6
7
8
9
10
11
#include<iostream>
#include<fstream>
using namespace std;
 
int main()
{
    char ch[16];
    ifstream ifs("file.txt", ios::binary);
    ifs.read(ch, 16);
    cout<<hex<<(int)ch[0];
}
3
qwerty181
1 / 1 / 0
Регистрация: 03.01.2011
Сообщений: 5
05.01.2011, 13:59  [ТС] #7
Цитата Сообщение от igorrr37 Посмотреть сообщение
128 бит - 16 байт, а содержит он байты а не символы, просто при выводе на экран они расшифровываются как символы. Вот первый байт файла в 10чном виде
C++
1
2
3
4
5
6
7
8
9
10
11
#include<iostream>
#include<fstream>
using namespace std;
 
int main()
{
    char ch[16];
    ifstream ifs("file.txt", ios::binary);
    ifs.read(ch, 16);
    cout<<(int)ch[0];
}
а вот в 16 ричном
C++
1
2
3
4
5
6
7
8
9
10
11
#include<iostream>
#include<fstream>
using namespace std;
 
int main()
{
    char ch[16];
    ifstream ifs("file.txt", ios::binary);
    ifs.read(ch, 16);
    cout<<hex<<(int)ch[0];
}

Спасибо igorrr37, теперь разобрался!))
1
05.01.2011, 13:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.01.2011, 13:59
Привет! Вот еще темы с решениями:

Размер строки в бинарном режиме!
Здорова господа!!! Имеется строка типа string в которую считано изображение....

Не удаётся открыть файл в бинарном режиме
Всем привет. Вроде делаю всё по примеру, но первый файл открывается, а второй...

Поиск числа в файле, открытым в бинарном режиме
Здравствуйте уважаемые дамы и господа, возник вопрос по поводу поиска числа в...

Как прочитать файл в бинарном режиме по 32 байта
Здравствуйте, как считать файл в бинарном режиме (в двоичной системе счисления)...


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

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

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