Форум: "Основная";
Текущий архив: 2011.10.30;
Скачать: [xml.tar.bz2];
ВнизПроблема при расчете контрольной суммы и внесении ее в файл. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c