Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];

Вниз

Проблема с заполнением массива байтов.   Найти похожие ветки 

 
Gear   (2005-05-20 17:45) [0]

Шифрую строку 123 и получаю hex-строку и вывожу её в мемо

-----------------------------
шифрование:

в едит пишем "123"

var
s: Pchar;
str:string;
i: integer;
dta: array of byte;
m:integer;
begin
str:=Edit1.Text;
m:=length(str) mod 8;

if m<>0 then
begin
   for j:=1 to 8-m do
   begin
   str:=str+" ";
   end;
end;
s:=Pchar(str);

dta:=nil;
SetLength(dta, length(s));

for i:=1 to (length(s) div 8) do
begin
//      функция шифрования
end;
for i:=0 to length(s)-1 do
memo1.Text:=memo1.Text+IntToHex(dta[i],2);

на выходе получаем в мемо строчку "FFE7F0ECDC6B93E3"

-------------
теперь самое страшное -дешифровка:

var

s: Pchar;
str:Pchar;
i,j: integer;
KeyData: TGOSTData;
dta1: array of byte;
dta2: array of byte;
m:integer;
sst:string;
hexstring:string;
begin

str:=pchar(memo1.Text);
dta1:=nil;
dta2:=nil;
SetLength(dta1, 8);
for i:=1 to 8 do  begin
  if (i mod 2)=0 then begin end else
  begin
   dta1[i-1]:=hextoint(str[i-1]+str[i]);
  end;
end;

{
SetLength(dta1, 8);
//SetLength(dta2, 8);
dta1[0]:=255;
dta1[1]:=231;
dta1[2]:=240;
dta1[3]:=236;
dta1[4]:=220;
dta1[5]:=107;
dta1[6]:=147;
dta1[7]:=227;
}

for i:=1 to (length(dta1) div 8) do
begin
  SetLength(dta2, length(dta2)+8);
  //дешифруем
end;

for i:=0 to length(dta2)-1 do
  memo2.Text:=memo2.Text+chr(dta2[i]);

и не работает (в мемо сыпет всякую хрень а не "123     "), но что самое удивительное если раскомментить, то что в {} и убрать блок чуть выше, то работает и выдаёт в мемо "123     ".По идее это одно и тоже. Кто подскажет где у меня не так заполняется массив байт? (функции и всяк лабуду отвечающую за шифровку дешифровку убрал чтобы не смущать).


 
Gear   (2005-05-20 17:47) [1]

да забыл:
function HexToInt(s: string): Longword;
var
  b: Byte;
  c: Char;
begin
  Result := 0;
  s := UpperCase(s);
  for b := 1 to Length(s) do
  begin
    Result := Result * 16;
    c := s[b];
    case c of
      "0".."9": Inc(Result, Ord(c) - Ord("0"));
      "A".."F": Inc(Result, Ord(c) - Ord("A") + 10);
      else
        raise EConvertError.Create("No Hex-Number");
    end;
  end;
end;


 
begin...end ©   (2005-05-20 19:56) [2]

> Gear   (20.05.05 17:45)

>for i:=1 to 8 do  begin
>  if (i mod 2)=0 then begin end else
>  begin
>   dta1[i-1]:=hextoint(str[i-1]+str[i]);
>  end;
> end;

for i := 1 to 8 do
 if (i mod 2) = 0 then
   dta[i - 1] := HexToInt(str[i - 1] + str[i])

> Gear   (20.05.05 17:47) [1]

См. в справке описание функции StrToInt.


 
begin...end ©   (2005-05-20 20:03) [3]

Нет, не так. Сорри. В строке ведь 16 символов, а цикл только по первым восьми.

for i := 1 to 16 do
 if (i mod 2) = 0 then
   dta[(i div 2) - 1] := HexToInt(str[i - 1] + str[i])

Кстати, есть ещё функция Odd.

Но я обычно делаю примерно так:

for i := 1 to 16 div 2 do
 dta[i - 1] := HexToInt(str[2 * i - 1] + str[2 * i])

или так:

for i := 1 to 16 div 2 do
 dta[i - 1] := HexToInt(Copy(str, 2 * i - 1, 2))


 
Gear   (2005-05-20 23:07) [4]

о спасибо большое! всё работает!


 
Gear   (2005-05-20 23:10) [5]

работает кстати последний пример только почему-то :)


 
begin...end ©   (2005-05-21 08:42) [6]

> Gear   (20.05.05 23:10) [5]

> работает кстати последний пример только почему-то

Все примеры из поста [3] должны работать одинаково и давать на выходе закоментированный в [0] массив.


 
TOT   (2005-05-27 13:10) [7]

Спасибо!!! После небольших изменений в НехТоинт всё заработало как надо!!!!


 
begin...end ©   (2005-05-27 18:51) [8]

> TOT   (27.05.05 13:10) [7]

HexToInt вполне можно заменить стандартной функцией StrToInt, о чём я и написал ещё в [2].



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

Форум: "Основная";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.043 c
4-1113549382
KarpUha1
2005-04-15 11:16
2005.06.14
Wav в модем


14-1116855042
blackman
2005-05-23 17:30
2005.06.14
Ничего не понимаю. Просветите...


6-1111175049
Ig
2005-03-18 22:44
2005.06.14
Indy UDP и динамическое создание компонентов


1-1117006147
Ботвин Дмитрий
2005-05-25 11:29
2005.06.14
Добавление кнопок


1-1117344094
VasilijOrlov
2005-05-29 09:21
2005.06.14
как мне сделать, чтобы пользователь щелкнул, изменил, закрыл и вс





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский