Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.10.30;
Скачать: CL | DM;

Вниз

Проблема при расчете контрольной суммы и внесении ее в файл.   Найти похожие ветки 

 
dorik   (2010-03-25 17:25) [0]

Чето уже не соображаю. Может у кого идеи есть.
Контрольные суммы при загрузке и при сохранении не соответствуют друг-другу. Причем отличаются немного, где-то -150...0...150. Как будто один лишний символ прибавляется.

Функция расчета контрольной суммы:
function CalcChecksum(Data:Pointer; Size:Longint): Longint;
var
 i: integer;
 b:PByte;
begin
 Result := 0;
 b := PByte(Data);
 if Size = 0 then Exit;
 for i := 1 to Size do
 begin
   inc(b);
   Inc(Result, Ord(b^));
 end;
end;


Процедура загрузки файла:
var
 DataStream:TMemoryStream;
 Sum:LongInt;
begin
 if not FileExists(DBFILE) then Exit;
 DataStream := TMemoryStream.Create;
 DataStream.LoadFromFile(DBFILE);

 DataStream.Position := 0;
 DecryptStream(DataStream,DataStream.Size,PASSWORD); //Расшифровываем данные

 DataStream.Position := DataStream.Size-SizeOf(LongInt);
 DataStream.Read(Sum,SizeOf(LongInt)); //Читаем контрольную сумму файла

 DataStream.SetSize(DataStream.Size-SizeOf(LongInt)); //удаляем контрольную сумму

 DataStream.Position := 0;

 if CalcChecksum(DataStream.Memory, DataStream.Size) <> Sum then
 begin
   ShowMessage("Пароль неверен!");
   DataStream.Free;
   Exit;
 end;

 DataStream.Position := 0;
 NoteEdit.Lines.LoadFromStream(DataStream);
 DataStream.Free;
 NoteEdit.Modified := False;


Процедура сохранения:
var
 DataStream:TMemoryStream;
 Sum:LongInt;
begin
 DataStream := TMemoryStream.Create;
 NoteEdit.Lines.SaveToStream(DataStream);

 Sum := CalcChecksum(DataStream.Memory, DataStream.Size); //Считаем контрольную сумму

 DataStream.SetSize(DataStream.Size+SizeOf(LongInt)); //создаем место для суммы

 DataStream.Position := DataStream.Size-SizeOf(LongInt);
 DataStream.Write(Sum,SizeOf(LongInt)); //записываем сумму

 DataStream.Position := 0;
 EncryptStream(DataStream,DataStream.Size,PASSWORD); //Зашифровываем

 DataStream.Position := 0;
 DataStream.SaveToFile(DBFILE); // сохраняем в файл
 DataStream.Free;

 NoteEdit.Modified := False;


 
MBo ©   (2010-03-25 17:43) [1]

инки местами поменяй


 
dorik   (2010-03-25 19:07) [2]

чего поменять?


 
Германн ©   (2010-03-25 19:18) [3]

Inc"и


 
dorik   (2010-03-25 23:04) [4]

Ааа! Точняк, я даун)) Мдя... Спрасибо!


 
evvcom ©   (2010-03-31 17:43) [5]

а чем API Win32 функция MapFileAndCheckSum не нравится? Чего велосипед изобретать?


 
evvcom ©   (2010-03-31 17:48) [6]

или даже API функции Crypt*



Страницы: 1 вся ветка

Текущий архив: 2011.10.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.009 c
15-1309608613
снусмумрик
2011-07-02 16:10
2011.10.30
Комментарии для закачки uTorrent


1-1269854003
EgorovAlex
2010-03-29 13:13
2011.10.30
Форма в dll. Пытаюсь разобраться


2-1310381051
leon2011
2011-07-11 14:44
2011.10.30
Помогите разобраться с TextOutW


15-1309513713
Дмитрий
2011-07-01 13:48
2011.10.30
перевод фразы


11-1238921424
MTsv DN
2009-04-05 12:50
2011.10.30
Использование LIB в Дельфи