Вверх ↑
Этот топик читают: Гость
Этот топик был перемещен из раздела "Помощь по среде"
Ответов: 196
Рейтинг: 2
#1: 2021-04-12 21:29:31 ЛС | профиль | цитата
Объясните пожалуйста, почему результат разный.

HiASM
Add(MainForm,2953706,329,203)
{
 Width=412
 Height=269
}
Add(StreamConvertor,12215568,491,270)
{
 Mode=2
 link(onResult,7597670:doText,[(537,276)(537,271)])
}
Add(Cryptography,4317299,427,270)
{
 Key="Lisnic"
 link(onCrypt,12215568:doConvert,[])
 link(Data,5523676:Caption,[(433,255)(438,255)])
}
Add(Edit,7597670,550,265)
{
 @Hint=#5:codul
 Left=45
 Top=70
 Width=310
 Height=35
 Font=[MS Sans Serif,12,0,0,1]
 Text=""
}
Add(Button,11482074,364,273)
{
 Left=155
 Top=125
 link(onClick,4317299:doCrypt,[(412,279)(412,276)])
}
Add(Label,5523676,432,208)
{
 Left=150
 Top=20
 Width=105
 Height=24
 Font=[MS Sans Serif,12,0,0,1]
 Visible=1
 Caption="Vitalicus"
 AddHint(49,12,54,13,Caption)
}



PHP
‹?
function xor_string($string, $key) {
    for($i = 0; $i ‹ strlen($string); $i++) 
        $string[$i] = ($string[$i] ^ $key[$i % strlen($key)]);
    return $string;
}

$encode=xor_string("Vitalicus","Lisnic");
$code=bin2hex($encode);
echo $code;
?›

Редактировалось 4 раз(а), последний 2021-04-12 21:31:57
карма: 0

0
Ответов: 321
Рейтинг: 10
#2: 2021-04-13 00:14:56 ЛС | профиль | цитата
Не знаю как должно это работать в PHP, но дело в ключе...
key[$i...] тут где-то, что-то не так... Если к ключу добавить еще 3 символа, тогда все ок...
Надо понять, как реализован алгоритм xor, сейчас погуглю...


Редактировалось 1 раз(а), последний 2021-04-13 00:15:58
карма: 1

0
Ответов: 321
Рейтинг: 10
#3: 2021-04-13 01:30:11 ЛС | профиль | цитата
Алгоритм XOR шифрования заключается в “наложении” последовательности случайных чисел на текст, который необходимо зашифровать. Последовательность случайных чисел называется гамма-последовательность, и используется для шифрований и расшифровки данных.

Ключ шифрования можно получить двумя способами:

Повторять ключевое слово пока длина гаммы не будет равна длине сообщения;
Сгенерировать последовательность псевдослучайных чисел, равную по длине тексту сообщения.


Если я правильно понимаю логику, то PHP делает все верно... А вот откуда такие значения в компоненте я не понимаю, сверял на калькуляторе, все ок у php...
Но из текста выше - "возможно 2 способа", мб в этом дело ?! Оо
не сходится



Редактировалось 1 раз(а), последний 2021-04-13 01:31:01
карма: 1

0
Ответов: 4652
Рейтинг: 760
#4: 2021-04-13 11:02:11 ЛС | профиль | цитата
Master4eG писал(а):
А вот откуда такие значения в компоненте я не понимаю
Я тоже. Там реализовано на ассемблере, плюс заморочились с многопоточным шифрованием для больше 64 кб (зачем, если быстродействие XOR и так не должно никого волновать?). В коде компонента строка и ключ дополняются пробелами до кратности 4, которые потом убираются. Что происходит в ассемблерной части - я без понятия.
Возможно в тех пробелах и проблема, которая не возникает "если к ключу добавить еще 3 символа".

Редактировалось 1 раз(а), последний 2021-04-13 11:03:47
карма: 26

0
Ответов: 196
Рейтинг: 2
#5: 2021-04-13 23:42:22 ЛС | профиль | цитата
Работает если в PHP добавить к ключу два пробела. В компонент Hiasm добавляют пробелы чтоб ключ был не меньше 8 char

Редактировалось 1 раз(а), последний 2021-04-14 02:29:07
карма: 0

0
Ответов: 196
Рейтинг: 2
#6: 2021-04-15 21:33:05 ЛС | профиль | цитата
Netspirit, Никак не могу использовать XOR шифрование в Unicode. В Unicode шифрование дает другой результат и не могу декодировать его в PHP
Add(MainForm,2953706,21,105)
{
 Width=849
 Height=470
}
Add(StreamConvertor,13503036,315,210)
{
 Mode=3
 Charset=3
 link(onResult,16031058:doCrypt,[])
}
Add(Cryptography,16031058,371,210)
{
 Key="Vitalicus"
 link(onCrypt,8529059:doEvent,[])
}
Add(GlobalVar,6409682,462,213)
{
 Name="parola"
}
Add(Button,2643349,231,210)
{
 Left=210
 Top=220
 Data=String(675b47)
 link(onClick,13503036:doConvert,[])
 AddHint(-15,-25,61,13,Data)
}
Add(Debug,8529059,427,210)
{
 link(onEvent,6409682:doValue,[(447,216)(447,219)])
}


Редактировалось 1 раз(а), последний 2021-04-15 21:38:43
карма: 0

0
Ответов: 207
Рейтинг: 14
#7: 2021-04-16 01:03:02 ЛС | профиль | цитата
lisnic, А так?

Add(MainForm,2953706,308,182)
{
 Width=382
 Height=295
}
Add(InlineCode,7442695,427,280)
{
 WorkPoints=#6:doCode|
 EventPoints=#5:onRes|
 DataPoints=#4:Data|3:Key|
 Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10:   private|0:|0:|9:   public|19:   Data: THI_Event;|18:   Key: THI_Event;|20:   onRes: THI_Event;|3:   |51:   procedure doCode(var _Data: TData; Index: Word);|5: end;|76: 	 function XorEncodeDecode(const aStr: String; const aKey: String): String;|0:|14:implementation|0:|59:procedure THiAsmUnit.doCode(var _Data: TData; Index: Word);|18:var str,ky:string;|5:begin|32:  str := ReadString(_Data,data);|30:  ky := ReadString(_Data,Key);|44: _hi_OnEvent(onRes,XorEncodeDecode(str,ky));|4:end;|0:|73:function XorEncodeDecode(const aStr: String; const aKey: String): String;|3:var|14:j, i: Integer;|5:begin|32:  if (aKey='') or (aStr='') then|15:   Result:=aStr|6:  else|8:   begin|9:    i:=1;|35:    SetLength(Result,Length(aStr));|31:    for j:=1 to Length(aStr) do|10:     begin|28:      if i>Length(aKey) then|12:       i:=1;|55:      Result[j]:=Char(Byte(aStr[j]) xor Byte(aKey[i]));|13:      inc(i);|9:     end;|7:   end;|4:end;|0:|4:end.|
 link(OnRes,13326622:doWork2,[])
 link(Key,15764081:Text,[])
}
Add(VisualStrings,15764081,434,231)
{
 Lines=#9:Vitalicus|
 Width=60
}
Add(StreamConvertor,13503036,357,280)
{
 Mode=3
 Charset=3
 link(onResult,7442695:doCode,[])
}
Add(Button,2643349,287,280)
{
 Left=25
 Top=15
 Data=String(675b47)
 link(onClick,13503036:doConvert,[])
 AddHint(-15,-25,61,13,Data)
}
Add(Button,452915,287,385)
{
 Left=110
 Top=15
 Caption="123"
 Data=String(123)
 link(onClick,11991779:doCode,[])
 AddHint(-15,-25,43,13,Data)
}
Add(InlineCode,11991779,392,385)
{
 WorkPoints=#6:doCode|
 EventPoints=#5:onRes|
 DataPoints=#4:Data|3:Key|
 Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10:   private|0:|0:|9:   public|19:   Data: THI_Event;|18:   Key: THI_Event;|20:   onRes: THI_Event;|3:   |51:   procedure doCode(var _Data: TData; Index: Word);|5: end;|76: 	 function XorEncodeDecode(const aStr: String; const aKey: String): String;|0:|14:implementation|0:|59:procedure THiAsmUnit.doCode(var _Data: TData; Index: Word);|18:var str,ky:string;|5:begin|32:  str := ReadString(_Data,data);|30:  ky := ReadString(_Data,Key);|44: _hi_OnEvent(onRes,XorEncodeDecode(str,ky));|4:end;|0:|73:function XorEncodeDecode(const aStr: String; const aKey: String): String;|3:var|14:j, i: Integer;|5:begin|32:  if (aKey='') or (aStr='') then|15:   Result:=aStr|6:  else|8:   begin|9:    i:=1;|35:    SetLength(Result,Length(aStr));|31:    for j:=1 to Length(aStr) do|10:     begin|28:      if i>Length(aKey) then|12:       i:=1;|55:      Result[j]:=Char(Byte(aStr[j]) xor Byte(aKey[i]));|13:      inc(i);|9:     end;|7:   end;|4:end;|0:|4:end.|
 link(onRes,4409739:doConvert,[])
 link(Key,254383:Text,[])
}
Add(VisualStrings,254383,399,336)
{
 Lines=#9:Vitalicus|
 Width=60
}
Add(HubEx,13326622,504,280)
{
 link(onEvent,10949635:doAdd,[])
}
Add(StreamConvertor,4409739,441,385)
{
 Mode=2
 Charset=3
 link(onResult,13326622:doWork3,[(508,391)])
}
Add(Memo,10949635,532,280)
{
 Left=10
 Top=40
 Width=335
 Height=205
 Ctl3D=1
 ScrollBars=3
}

карма: 2

1
Голосовали:lisnic
Ответов: 196
Рейтинг: 2
#8: 2021-04-16 04:18:49 ЛС | профиль | цитата
Joiner, спасибо, работает
карма: 0

0
Ответов: 4652
Рейтинг: 760
#9: 2021-04-16 11:17:04 ЛС | профиль | цитата
lisnic писал(а):
Никак не могу использовать XOR шифрование в Unicode
Там надо доработать компонент Cryptography. Плюс учитывать кодировку символов, подаваемых на него и ожидаемых в PHP.
карма: 26

0
Ответов: 4652
Рейтинг: 760
#10: 2021-04-19 10:49:22 ЛС | профиль | цитата
lisnic, попробуй переделанный Cryptography.
карма: 26

1
файлы: 1Cryptography_Unicode_2021-04-17.zip [2KB] [509]
Голосовали:lisnic
Ответов: 196
Рейтинг: 2
#11: 2021-04-20 13:47:51 ЛС | профиль | цитата
Netspirit, спасибо, работает.
И последнее, ждем компонент Translate в Unicode, пожалйста.
карма: 0

0
Ответов: 63
Рейтинг: 1
#12: 2021-06-10 20:43:06 ЛС | профиль | цитата
Может кто-нибудь сделать схему хэш-функции SHA-256 ?? В HiAsm есть уже готовый элемент, но мне нужно именно поэтапно разобрать математические действия. Никак не могу понять эту функцию.
карма: 1

0
Ответов: 4652
Рейтинг: 760
#13: 2021-06-11 10:59:10 ЛС | профиль | цитата
В "Википедии" посмотри.
карма: 26

0
13
Сообщение
...
Прикрепленные файлы
(файлы не залиты)