Добрый самаритянин
1107 / 622 / 139
Регистрация: 31.03.2009
Сообщений: 2,567
|
||||||
1 | ||||||
TFileStream23.02.2010, 20:46. Показов 24701. Ответов 26
Метки нет (Все метки)
0
|
23.02.2010, 20:46 | |
Ответы с готовыми решениями:
26
TfileStream Ошибка в TFileStream что с TFileStream Работа с TFileStream |
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
|
|||||||||||
24.02.2010, 07:56 | 2 | ||||||||||
Чтение данных из файла должно быть выполнено так: stream.Read(Pointer(Buff)^, i);
Аргументом StrPas должены быть данные типа PChar. Если написать так: Memo1.Text := StrPas(PChar(Buff)); Тогда StrPas станет просматривать массив buff до тех пор, пока не встретит терминальный ноль - это символ с кодом = 0. Таким образом, если в Buff имеется терминальный ноль, то строка будет обрезана на позиции, где он расположен. - Т. е. произойдёт потеря части строки, если терминальный ноль не в конце Buff. Если же терминального нуля вообще нет в Buff, тогда StrPas продолжит обработку байтов за пределами Buff - это скорее всего вызовет ошибку Access Violation, либо добавит в конец строки "мусор". Поэтому придётся работать со строковым буфером. - Или стразу грузить в него данные из файла, или же копировать в него данные на этапе передачи данных в Мемо:
1
|
Добрый самаритянин
1107 / 622 / 139
Регистрация: 31.03.2009
Сообщений: 2,567
|
|
24.02.2010, 18:01 [ТС] | 3 |
Да Mawrat, спасибо за такой подробный ответ
0
|
0 / 0 / 0
Регистрация: 20.02.2010
Сообщений: 15
|
|||||||||||
25.03.2011, 08:17 | 4 | ||||||||||
Здравствуйте, у меня аналогичная проблема...
Добавлено через 24 минуты Вот по невнимательности упустил...
0
|
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
|
||||||||||||||||
25.03.2011, 09:06 | 5 | |||||||||||||||
Если надо загрузить данные именно в Мемо - эта задача решается в пару строк:
kovalevcon, эта строка не нужна:
0
|
0 / 0 / 0
Регистрация: 20.02.2010
Сообщений: 15
|
|
25.03.2011, 09:40 | 6 |
Вроде работает но не как надо... поясню, с самого начала.
Смысл всего этого, что мне нужно применить шифрование RSA на файле (желательно чтоб можно было использовать любые расширения, а не только *.txt). Так вот программу для шифрования и дешифрования я нашел и хочу адаптировать для своих целей. Вот только где я не смотрел все программы работают с текстом, и только с ним, осуществляют преобразования над ним. Так вот я и подумал а если данные из файла представить в виде текста (String) сделать над ними шифрование и снова записать в файл. Возможно ли вообще такое сделать?Не изменяться ли данные файла после расшифровывания? Я пробовал на файле *.rar, менял в ручную расширения на *.txt и получалось следующее содержимое: Rar! О™sЂ \+…^,юВ*тБѕЇРщ@э™ UнЌ@ѓ*hжяҐЄЂ¬д+`7ЊэHсLWҐ,†tЈП ц§B™в6QA 5ТН?ўЦЪЇђ¤_CQнІюfrВЉH<cўх‰(?tЎх#л†:xъяьBw>pН@:ОlшДі„yТVуМ*«\+…^,юВ* aЇЬ‘рђlk7гx“*40p А программа считывает данные только вот эту часть: Rar! Тот же результат если я не меняю расширения на txt или указываю как положено "1.rar". ...Вот я сижу и думаю не ужели делать все преобразования только на txt файле? Жду вашего совета
0
|
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
|
||||||
25.03.2011, 10:17 | 7 | |||||
От расширения файла его содержимое никак не поменяется. Что касается строки String (в Delphi7 String = AnsiString) - она используется как контейнер данных (байтов). Строка AnsiString - это последовательность байтов и в неё можно грузить любые данные, не важно что это - текст, изображение, звук или ещё что-то. К байтам можно применить механизм RSA шифрования так же как и к символам - это одно и тоже по сути.
Символ Char (AnsiChar) совпадает по внутреннему формату с типом Byte. Т. е. может принимать значения: 0..255. В терминах типа Char: #0..#255. Поэтому, данные из файла можно грузить в String, array of Char или в array of Byte. Затем, к байтам применить процедуру шифрования. kovalevcon, ты пытаешься содержимое из *.rar загрузить в Мемо? Дело в том, что визуальные компоненты, отображающие текст, работают со строками типа PChar. В строках типа PChar окончания кодируются символом #0 - терминальный ноль называется. Т. е., это байт со значением = 0. Соответственно, если в такой строке встретится символ с кодом #0, то будет воспринята только та часть строки, которая идёт до кода #0. Всё что расположено правее #0 будет отсечено. Например, выполним вот этот код:
--- Вывод такой: -В качестве буфера, принимающего данные из файла, может быть использованы переменные, например, следующих типов: String, array of Char, array of Byte. - Загружать данные в эти контейнеры можно из любых файлов. - К загруженным байтам можно применять алгоритмы шифрования. - Визуальные компоненты, применяемые для отображения текстовых данных, не подходят для показа двоичных данных, которые могут содержать нулевые байты.
1
|
0 / 0 / 0
Регистрация: 20.02.2010
Сообщений: 15
|
|
25.03.2011, 11:11 | 8 |
Спасибо большое за разъяснение Я до этого заметил что что не так, взял и убрал через редактор один пробел (видать это и было #0) и всё за работало, но если чуть изменить файл он не будет исходным в конце после расшифровывания. Теперь шифрование надо реализовать в своей программе. Ещё раз большое спасибо!!!Отпишу когда всё заработает
--- Mawrat: Пожалуйста.
0
|
32 / 32 / 3
Регистрация: 04.04.2010
Сообщений: 414
|
|
25.03.2011, 11:26 | 9 |
А что вы за программы пишите, что такие проблемы? Просто делать нечего, афтер эффект надоел. Хочу чем нибудь позезным заняться.
0
|
0 / 0 / 0
Регистрация: 20.02.2010
Сообщений: 15
|
|||||||||||
28.03.2011, 16:28 | 11 | ||||||||||
Здравия всем) Пишу опять по тому же поводу... теперь ситуация такая:
Вот функция шифрования:
Добавлено через 9 минут Сначала выдавал ошибку ошибку что то не с совместимостью переменных или выхода за приделе памяти...но теперь выполняет и в файл ничего не записывает...
0
|
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
|
|||||||||||
28.03.2011, 22:06 | 12 | ||||||||||
Надо вот этот участок подправить:
0
|
0 / 0 / 0
Регистрация: 20.02.2010
Сообщений: 15
|
||||||
29.03.2011, 09:27 | 13 | |||||
Спасибо, работает...вот теперь обратное действие, не работает.
Мне не нравится что постоянно из одного вида переменных в другую (из string в массив integer,из массива integer в string), может ли это повлиять на саму информацию?Не изменится ли она?
0
|
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
|
|||||||||||
29.03.2011, 12:31 | 14 | ||||||||||
--- Mawrat: код выше надо подправить так:
0
|
0 / 0 / 0
Регистрация: 20.02.2010
Сообщений: 15
|
||||||||||||||||||||||||||
29.03.2011, 16:06 | 15 | |||||||||||||||||||||||||
Ну я сижу и разбираюсь....запись и чтение из файлов проходит правильно.
Делаю следующее, открываю файл в нём допустим текст "priveT", после шифрования он записывается как массив integer типа вот такого:
Я пытался обрезать эту переменную:
Большое спасибо за предыдущие советы Если бы не они я бы долго ещё разбирался
0
|
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
|
||||||
29.03.2011, 16:31 | 16 | |||||
Это значит, размер строки и/или массива неверно задаётся.
kovalevcon, покажи как функция Decrypt() реализована. - Это она возвращает строку с неверной длиной.
0
|
0 / 0 / 0
Регистрация: 20.02.2010
Сообщений: 15
|
|
29.03.2011, 16:37 | 17 |
Вот все исходники, я проверял шифрование на других типах файлов, кроме *.txt но при дешифровании выходит ошибка, такое чувство что где переменная выходит за свои пределы...
0
|
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
|
|||||||||||
29.03.2011, 16:51 | 18 | ||||||||||
kovalevcon, вот где проблема:
0
|
0 / 0 / 0
Регистрация: 20.02.2010
Сообщений: 15
|
||||||||||||||||
30.03.2011, 12:52 | 19 | |||||||||||||||
Да верно это выход, только вот кое что забыли...
Если не добавить одну строчку:
Но при тестировании видно следующее (см. Пример.jpg) Хотя если подобрать другой открытый и закрытый ключ все может быть верным...и опять эта проблема из за '#0','#1','#2','#3' (buf: 'q'#0'ert'#2'uiop[]asdfghjkl;''#3#1'cvbnm,./')
0
|
0 / 0 / 0
Регистрация: 20.02.2010
Сообщений: 15
|
|
30.03.2011, 12:53 | 20 |
Пример.jpg
0
|
30.03.2011, 12:53 | |
30.03.2011, 12:53 | |
Помогаю со студенческими работами здесь
20
Потоки (TFileStream) Ошибка чтения из TFileStream TfileStream чтение данных Обработка исключений TFileStream Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |