Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.009 c
3-48871
Step
2002-12-18 17:15
2003.01.16
Сумма строкой


1-49078
gorv
2003-01-04 22:57
2003.01.16
Sohranenie TLIST v file


14-49283
Дмитрий К.К.
2002-12-27 13:13
2003.01.16
Когда будет ДАВНО обещанный турнир по шахматам среди участников..


14-49247
Dimas
2002-12-26 17:23
2003.01.16
File not found: system.pas


14-49272
Bboy
2002-12-27 10:04
2003.01.16
Как в Ворде разместить таблицу????





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский