Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Теоретические вопросы _ Вопрос с алгоритмом DES

Автор: Unconnected 16.07.2008 1:10

Здравствуйте, есть алгоритм шифрования DES, но он шифрует максимум около 8 байт(я могу ошибаться), т.е. бОльшие файлы игнорируются. Насколько я понимаю, нужно составить цепочку из 8-байтных блоков.Возможно,я что-то не так понял? Модуль c примером его использования прилагается.

Автор: volvo 16.07.2008 3:02

Цитата
но он шифрует максимум около 8 байт
Вообще-то DES шифрует информацию 64 битовыми блоками, так что не "максимум", а именно 8 байт...

Цитата
Насколько я понимаю, нужно составить цепочку из 8-байтных блоков
Угу... Читать файл порциями, кратными 8 байтам, что присоединенная программа и делает... Только вот по-моему, у нее есть небольшой недостаток: она будет увеличивать размер файла до размера кратного 8 (если в исходном файле было 53 байта, то после дешифрации станет 56, причем 3 конечных - мусор). Проверить сейчас не могу - TP недоступен, но выглядит программа USE-DES работоспособной... Или она работает некорректно? Тогда расскажи, в чем именно заключается неправильная работа...

Автор: Unconnected 16.07.2008 13:19

USE-DES вполне работоспособна, мне удавалось зашифровать небольшой txt файл.

Автор: Unconnected 16.07.2008 14:00

Проблема в том, что при шифровании "больших" файлов(350 кб например) получаются файлы размером 4 кб.

Автор: volvo 16.07.2008 14:55

Угу... проблема - вот тут:

Цитата
  n:=FileSize(f); { <--- описано как Word, но Word не может хранить размеры больше 64К }
k:=n div Rec; if n mod Rec<>0 then inc(k);
Переделай вот так:

var
f_size: longint;
{
k и i я бы тоже сделал longint-ами, а то мало ли, захочешь
зашифровать файл размером больше 65535*512байт = 32Мб,
опять будет проблема
}

...
f_size := FileSize(f);
k:=f_size div Rec; if f_size mod Rec<>0 then inc(k);
...

Автор: Unconnected 16.07.2008 16:19

Получается, у тебя f_size вместо переменной n? Теперь возникает ошибка 98, F_size должна иметь целочисленный тип.
А если её сделать integer, то такая же песня с 4-мя килобайтами получается(

Автор: volvo 16.07.2008 16:23

Я где-то написал, что вместо? Покажи, где... Я добавил переменную, которая должна выполнять свою функцию: хранить размер файла... Что там у тебя делает N - это другие проблемы, f_size это не касается никаким боком.

Автор: Unconnected 16.07.2008 16:29

Volvo, огромное спасибо. Как репутацию повышать?