Вверх ↑
Этот топик читают: Гость
Этот топик был перемещен из раздела "Помощь по среде"
Ответов: 188
Рейтинг: 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
vip
#1.1контекстная реклама от партнеров
Ответов: 320
Рейтинг: 10
#2: 2021-04-13 00:14:56 ЛС | профиль | цитата
Не знаю как должно это работать в PHP, но дело в ключе...
key[$i...] тут где-то, что-то не так... Если к ключу добавить еще 3 символа, тогда все ок...
Надо понять, как реализован алгоритм xor, сейчас погуглю...


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

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

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

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


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



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

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

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

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

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

0
Ответов: 188
Рейтинг: 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
Ответов: 177
Рейтинг: 11
#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
}

карма: 1

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

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

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

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

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