Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
bv7
Зарегистрирован: 13.10.2008 Сообщения: 6
|
Добавлено: Пн Окт 13 2008 20:55 Заголовок сообщения: Криптография (Delphi) |
|
|
Нужна помощь в реализации кодирования информации. Шифрование реализуется алгоритмом RC6, все кодирует без проблем по 64 бита, если остается часть меньше 64 бит, то она просто дописывается без кодирования.
Вот реализация функции кодирования:
Код: | function EncryptCopy(DestStream, SourseStream : TStream; Count: Int64;
Key : string): Boolean;
var
Buffer : TRC6Block;
PrCount : Int64;
AddCount : Byte;
begin
Result := True;
try
if Key = '' then
begin
DestStream.CopyFrom(SourseStream, Count);
Exit;
end;
Initialize(Key);
CalculateSubKeys;
PrCount := 0;
while PrCount <> Count do // всё ли зашифровано?
begin
SourseStream.Read(Buffer, BlockSize);
EncipherBlock(Buffer);
DestStream.Write(Buffer, BlockSize);
Inc(PrCount, BlockSize);
end;
AddCount := Count - PrCount;
if Count - PrCount <> 0 then
begin
SourseStream.Read(Buffer, AddCount);
DestStream.Write(Buffer, AddCount);
end;
except
Result := False;
end;
end; |
|
|
Вернуться к началу |
|
|
grf
Зарегистрирован: 05.04.2005 Сообщения: 1242 Откуда: Москва
|
Добавлено: Пн Окт 27 2008 15:03 Заголовок сообщения: |
|
|
Цитата: | 64 бит, то она просто дописывается без кодирования.
|
Блин, а я всегда в последние полсотни бит ключ записывал
_________________ Errare humanum est |
|
Вернуться к началу |
|
|
bv7
Зарегистрирован: 13.10.2008 Сообщения: 6
|
Добавлено: Пн Окт 27 2008 17:19 Заголовок сообщения: |
|
|
Чем острить, помог бы лучше. |
|
Вернуться к началу |
|
|
grf
Зарегистрирован: 05.04.2005 Сообщения: 1242 Откуда: Москва
|
Добавлено: Ср Окт 29 2008 17:30 Заголовок сообщения: |
|
|
чем? я что-то вопросов в твоем топике не увидел?
_________________ Errare humanum est |
|
Вернуться к началу |
|
|
Mytilus Galloprovincialis
Зарегистрирован: 30.08.2005 Сообщения: 358 Откуда: откуда все люди родятся
|
Добавлено: Ср Ноя 19 2008 03:04 Заголовок сообщения: |
|
|
Сначала не плохо бы внимательно прочитать код.
Мы имеем цикл, прерывающийся при PrCount = Count, а следующей строкой идет AddCount := Count - PrCount.
Проще было бы написать AddCount := 0, не правда ли? ))
Далее видим: if Count - PrCount <> 0 then. А с чего бы им быть НЕравными, если перед этим мы косвенно провели проверку на их равенство (в условии цикла)?
Короче, юзаем код, исправляем ошибки, и, возможно, разум победит над железом.
Удачи! |
|
Вернуться к началу |
|
|
|