0 / 0 / 1
Регистрация: 18.04.2015
Сообщений: 138
|
||||||
1 | ||||||
Мой алгоритм дешифрует не все14.06.2015, 22:45. Показов 1444. Ответов 37
Метки нет (Все метки)
Здравствуйте, и опять я. Хотел с помощью XOR шифровать большие тексты (свыше 3к символов), но он некорректно справляется с 400-500 символов.
Код:
fin — файл с текстом на английском. key — в нём ключ, ибо он очень длинный. fout — зашифрованный текст. fout1 — дешифрованный fout (который мы ранее зашифровали).
0
|
14.06.2015, 22:45 | |
Ответы с готовыми решениями:
37
Мой алгоритм шифрования Попробуйте расшифровать мой алгоритм Программа не правильно дешифрует Правильный ли мой алгоритм вхождения строки в подстроку по уровню? |
0 / 0 / 1
Регистрация: 18.04.2015
Сообщений: 138
|
|
14.06.2015, 22:52 [ТС] | 2 |
0
|
14.06.2015, 23:23 | 3 | |||||
Это "ни о чем".
Работать надо с байтами и явным размером. http://gazlan.narod.ru/toy_tools/xor.rar
Код
Файл SrcFile перезаписывается на месте без предупреждения. Если Вам нужен оригинальный файл - сделайте Backup-копию. Файл XorFile открывается только для чтения и не изменяется. Файл XorFile используется как Binary Template и не должен содержать никаких "лишних" символов - таких как пробел, табуляция, перевод строки. Размер каждого из файлов не должен превышать 2 Gb.
0
|
0 / 0 / 1
Регистрация: 18.04.2015
Сообщений: 138
|
|
14.06.2015, 23:37 [ТС] | 4 |
Так в чем проблема? В том что я использую string вместо char? Так string тоже набор char символов.
Укажите на проблему. С текстами поменьше все нормально. А string использую что бы не хаставлять пользователя вводить размер.
0
|
0 / 0 / 1
Регистрация: 18.04.2015
Сообщений: 138
|
|
15.06.2015, 00:00 [ТС] | 6 |
Да, так и есть, но с файлми просто для теста, что бы не вводить такие длинные тексты. Вообще программа не должна требовать размер текста, а потом ещё и размер ключа. По этому я просто добавил чтение/запись. Пользователь будет вводить только ключ и текст, это очень важно.
0
|
15.06.2015, 00:20 | 7 |
опять нарветесь на ту же проблему. Размер двоичного буфера не может быть вычислен, он должен задаваться явно. И лучше не полагаться на свойства контейнера (string) - он может быть потерян при преобразовании.
0
|
0 / 0 / 1
Регистрация: 18.04.2015
Сообщений: 138
|
|
15.06.2015, 00:26 [ТС] | 8 |
Какое же решение? Я не могу знать заранее ключ или текст. Посоветуйте что-то, желательно то, что бы вы сами использовали, если бы нужно было вводить без указания размера. Я новичек, string — это первое, что пришло в голову.
0
|
88 / 84 / 31
Регистрация: 18.11.2013
Сообщений: 390
|
||||||
15.06.2015, 00:27 | 9 | |||||
ещё вот возможно рабочий совет, закрывайте потоки(файлы) после того как прочтёте\запишете
0
|
0 / 0 / 1
Регистрация: 18.04.2015
Сообщений: 138
|
|
15.06.2015, 00:30 [ТС] | 10 |
Учту. В настоящий момент я уже закрыл потоки, просто не хотел обновлять код.
0
|
88 / 84 / 31
Регистрация: 18.11.2013
Сообщений: 390
|
||||||
15.06.2015, 00:36 | 11 | |||||
как лучше сделать? считывать побитово(в идеале), ну посимвольно в реальности равномерно с обоих файлов, к примеру есть файл сообщение.тхт и ключ.тхт, они должны быть равны если шифрование вернама, ну или сделать циклически для ключа.
так вот, делаем 2 переменные char: a и b; и делаем цикл от 0 до размера файла в символах(до конца файла) считываем в 'a' символ с сообщение.тхт, в 'b' считываем символ с ключ.тхт, делаем XOR, к примеру char c = a XOR b, и записываем 'с' в файл закодированное_сообщение.тхт как же раскодировать? точно так же, только вместо "сообщение.тхт" использовать "закодированное_сообщение.тхт". сейчас набросаю код Добавлено через 4 минуты
0
|
15.06.2015, 00:36 | 12 |
Обычная практика - размер помещается первым DWORD'ом в буфер.
В любом случае, вы же как-то передаете ваши зашифрованные данные и ключ? - там же можете передать и их размеры (и прочие метаданные - Timestamp, CRC etc).
0
|
0 / 0 / 1
Регистрация: 18.04.2015
Сообщений: 138
|
|
15.06.2015, 00:38 [ТС] | 13 |
Хорошо, будет полезно. Но мне нужно вводить ключ и текст без указания размера, я решил использовать string и появились проблемы (см. выше) с дешифровкой. Человек выше говорит что это из-за string, что нужно использовать char. Я теряюсь.. Даже не знаю что делать.
0
|
88 / 84 / 31
Регистрация: 18.11.2013
Сообщений: 390
|
||||||
15.06.2015, 00:41 | 14 | |||||
gazlan, не подскажете можно ли одной операцией считать весь файл в строку? cin >> для слова, getline для строки, думаю есть и getall, getfile для всего файла
Добавлено через 1 минуту
0
|
0 / 0 / 1
Регистрация: 18.04.2015
Сообщений: 138
|
|
15.06.2015, 00:43 [ТС] | 15 |
Извините за ошибку, я не сильно хорошо знаю русский. Ну тогда пользователю нужно будет вводить этот DWORD. А ему это не нужно, он хочет в один клик шифровать и дешифровать. Дайте пожалуйста ссылку на справку по DWORD..
0
|
88 / 84 / 31
Регистрация: 18.11.2013
Сообщений: 390
|
|
15.06.2015, 00:46 | 16 |
хотя всё равно могу ошибаться, может быть и считывается символ '\0' в конце
кстати надо проверить правильность string'ов, чтобы все заканчивались на '\0' Добавлено через 2 минуты если всё что выше вам не помогло, я могу лишь посоветовать вам включить отладку и проверять файл fout.txt после каждой записи
0
|
0 / 0 / 1
Регистрация: 18.04.2015
Сообщений: 138
|
|
15.06.2015, 00:49 [ТС] | 17 |
0
|
88 / 84 / 31
Регистрация: 18.11.2013
Сообщений: 390
|
|
15.06.2015, 00:49 | 18 |
нашёл информацию про DWORD:
DWORD — 32-битное беззнаковое целое. Аналоги: unsigned long int, UINT. зачем нужно использовать DWORD? и думаю не стоит вообще его использовать т.к. вводит в заблуждение
0
|
0 / 0 / 1
Регистрация: 18.04.2015
Сообщений: 138
|
|
15.06.2015, 00:52 [ТС] | 19 |
0
|
15.06.2015, 00:54 | 20 |
Я говорил уже, вам вообще не нужны строки. И чем раньше вы о них забудете, чем лучше.
Например, по приведенной мной ранее ссылке, используется file mapping и вся обработка сводится к XOR'у двух массивов, об остальном позаботится OS. Если ваш файл так велик, что RAM не хватает - читайте частями в буфер меньшего размера - без всяких преобразований типа и создания бесполезных дополнительных оберток (a la string). Если же непременно хочется использовать потоки, можете читать файл посимвольно (OS возьмет на себя буферизацию).
0
|
15.06.2015, 00:54 | |
15.06.2015, 00:54 | |
Помогаю со студенческими работами здесь
20
Написать программу, которая шифрует и дешифрует файл алгоритмом с открытым ключом Google потерял все ссылки на мой сайт -> PR=0 Написать программу, которая дешифрует текст исходного текстового файла, состоящего из различных слов и знаков препинания Блокнот. Как создать блокнот для Android? Правильно ли мой алгоритм написан? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |