Форум: "Основная";
Текущий архив: 2003.01.16;
Скачать: [xml.tar.bz2];
ВнизПередача строк в/из ДЛЛ. Найти похожие ветки
← →
Fredericco (2003-01-04 15:10) [0]Есть моя ДЛЛька шифрования.
Вот код:
procedure EnCrypt_2(CodeT:PChar;var Res:PChar);// export;
var
Crypt,Code:string;
i,KeyCrypt1,KeyCrypt2,KeyCrypt3,KeyCrypt4,KeyCrypt5,KeyCrypt6,KeyCrypt7,KeyCrypt8,KeyCrypt255,KeyCrypt255_2,iCrypt:integer;
lne:integer;
begin
if @Res = nil then exit;
if CodeT = nil then exit;
try
Code:=CodeT;
Crypt:=StringOfChar(" ",Length(Code)*11);
lne:=Length(Code);
Randomize;
for i:=1 to lne do begin
KeyCrypt1:=Random(20)+1;
KeyCrypt2:=KeyCrypt1+Random(18)+1;
KeyCrypt3:=KeyCrypt2+Random(16)+1;
KeyCrypt4:=KeyCrypt3+Random(14)+1;
KeyCrypt5:=KeyCrypt4+Random(12)+1;
KeyCrypt6:=KeyCrypt5+Random(10)+1;
KeyCrypt7:=KeyCrypt6+Random(8)+1;
KeyCrypt8:=KeyCrypt7+Random(6)+1;
iCrypt:=Ord(Code[i]);
iCrypt:=(iCrypt+1) xor KeyCrypt1;
iCrypt:=(iCrypt+2) xor KeyCrypt2;
iCrypt:=(iCrypt+3) xor KeyCrypt3;
iCrypt:=(iCrypt+4) xor KeyCrypt4;
iCrypt:=(iCrypt+5) xor KeyCrypt5;
iCrypt:=(iCrypt+6) xor KeyCrypt6;
iCrypt:=(iCrypt+7) xor KeyCrypt7;
iCrypt:=(iCrypt+8) xor KeyCrypt8;
iCrypt:=iCrypt+1;
if iCrypt>255 then begin
KeyCrypt255:=iCrypt-255+1;
iCrypt:=255;
end Else KeyCrypt255:=1;
if KeyCrypt255>255 then begin
KeyCrypt255_2:=KeyCrypt255-255+1;
KeyCrypt255:=255;
end Else KeyCrypt255_2:=1;
Crypt[(i-1)*11+1]:=Chr(KeyCrypt1);
Crypt[(i-1)*11+2]:=Chr(KeyCrypt2);
Crypt[(i-1)*11+3]:=Chr(KeyCrypt3);
Crypt[(i-1)*11+4]:=Chr(KeyCrypt4);
Crypt[(i-1)*11+5]:=Chr(KeyCrypt5);
Crypt[(i-1)*11+6]:=Chr(KeyCrypt6);
Crypt[(i-1)*11+7]:=Chr(KeyCrypt7);
Crypt[(i-1)*11+8]:=Chr(KeyCrypt8);
Crypt[(i-1)*11+9]:=Chr(KeyCrypt255);
Crypt[(i-1)*11+10]:=Chr(KeyCrypt255_2);
Crypt[(i-1)*11+11]:=Chr(iCrypt);
end;
// ShowMessage(IntToStr(Length(Crypt)));
Res:=PChar(Crypt);
// ShowMessage(IntToStr(Length(Res)));
except
ShowMessage("err except");
end;
end;
Так вот при шифровани символа "A" длина строкиb
(проверяю в программе, вызывающей ДЛЛ: так как проверка в ДЛЛ не показала ошибок) равна 11. Пока правильно. Если пытаюсь зашифровать "AA" возвращается 21! Не правильно. Далее приведу сколько символов шифрую и длинуb
:
3 - 33 - правильно;
4 - 44 - правильно;
5 - 53 - не правильно;
6 - 66 - правильно;
7 - 77 - правильно;
300 - 3300 - правильно;
776 - 8536 - правильно;
777 - 8546 - не правильно;
900 - 8422 - не правильно;
9000 - 322 - не правильно;
9320 - 2 - не правильно;
9327 - 1 - не правильно;
9328 - акцесс виолятион!
Подскажите пожалуйста кто чем может.
Заранее благодарен,
с уважением
Fredericco.
← →
Fredericco (2003-01-04 15:13) [1]Модераторы плиз не удаляйте мой пост из "Система".
Я случай туда и сюда пост отправил.
Правда не хотел!
← →
mrcat (2003-01-04 16:36) [2]procedure EnCrypt_2( CodeT:PChar;var Res:PChar);// export;
если результат содержит #0 что делать будете?
procedure EnCrypt_2(CodeT: string;var Res: string);// export;
и пр. PChar меняйте...
← →
sniknik (2003-01-04 16:48) [3]если работать со строками то
(из предупреждения когда dll создаеш)
ShareMem must be the first unit in your library"s USES clause AND your project"s
и вызовы экспортных процедур (различие в передаче параметров)
procedure EnCrypt_2(CodeT:PChar;var Res:PChar); stdcall;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.01.16;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c