Как убрать нули при записи BlowFish

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Как убрать нули при записи BlowFish

Сообщение resident » 15.01.2014 15:28:55

Здрасть :)
Шифрую поток памяти в файловый поток. При расшифровке в конце файла получаются нули.
В хелпе пишут, что алгоритм пишет по 4 байта, может с этим связано? Но в конце получается и например шесть NUL.
Изображение
Data is always written 4 bytes at a time, since this is the amount of bytes required by the Blowfish algorithm. If no multiple of 4 was written to the destination stream, the Flush mechanism can be used to write the remaining bytes.

Как бы избавиться от этих нулей?
з.ы. Пока придумал расшифровывать в TStringStream, его копировать в TStringList, а там уже смотреть каждую строку и удалять нули. Но в итоге мне нужен TMemoryStream и я TStringList копирую в него. Получается какая-то длинная цепочка.
TBlowFishDeCryptStream -> TStringStream -> TStringList -> TMemoryStream
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: Как убрать нули при записи BlowFish

Сообщение debi12345 » 15.01.2014 15:48:03

Если непечатаемые символы вообще не нужны - можно перед шифрованием вырезАть все ASCII-коды ниже 32. А табуляции заменять например 4-мя пробелами, а LF заменять например "<BR>" (как в HTML).
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: Как убрать нули при записи BlowFish

Сообщение resident » 15.01.2014 16:36:49

Спасиб :)
Но хотелось бы какого-то упрощения. Сложный путь у меня и так работал.
Вобщем теперь работа только с TMemoryStream, благодаря функции
Код: Выделить всё
procedure RemoveNullFromMemoryStream(Stream: TMemoryStream);

Отсюда:
http://stackoverflow.com/questions/18801835/cannot-remove-null-characters-from-a-string
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: Как убрать нули при записи BlowFish

Сообщение debi12345 » 15.01.2014 18:15:27

Код: Выделить всё
procedure RemoveNullFromMemoryStream(Stream: TMemoryStream);

Есть подозрение что метод "StringReplace(str, #0, '', [rfReplaceAll]);" на большом объеме данных будет очень медленным (из-за копирования потока самого на себя со сдвигом). Лучше было бы пофрагментно собирать печатаемые фрагменты потока в строку - и возвращать уже ее.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: Как убрать нули при записи BlowFish

Сообщение resident » 16.01.2014 08:03:33

Ok :)
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 221

Рейтинг@Mail.ru
cron