Пара вопросов от новичка. Please.

AllOk

Новичок
Пара вопросов от новичка. Please.

Вынужден самостоятельно (c нулевым знанием PHP) исправлять ошибки человека, который меня прокинул после получения денег и оставил с нерабочим проектом, подробности тут - http://www.progz.ru/forum/index.php?showtopic=36724

Поэтому прошу небольшой помощи.

Итак:

Есть некий массив $midbranch=array(); , который сначала забивается бинарными данными, потом в него же ложиться текстовое имя.

$midbranch[]=strlen($username);
for ($i=0;$i<strlen($username);$i++){
$midbranch[]=$username[$i];}

Где username есть текст.

Потом этот блок отправляется программе, строкой:

for ($i=0;$i<count($midbranch);$i++){
printf("%02X",$midbranch[$i]);


Проблема в том, что по получению (после декодировки HexToStr), вместа текста имеем все нули. Если поставить printf("%01s",$midbranch[$i]); , то будем иметь текст, но все остальное будет в непонятном формате.


Как сделать так, чтобы я получил на выходе в программе, бинарные данные и текстовые данные a одном блоке?
 

kruglov

Новичок
Название HexToStr мне ничего, к примеру, не говорит.

Как должны выглядеть закодированные текстовые данные?
 

AllOk

Новичок
Автор оригинала: kruglov
Название HexToStr мне ничего, к примеру, не говорит.

Как должны выглядеть закодированные текстовые данные?
Спасибо, что откликнулись.


Так как данные отдаются в HEX функцией printf("%02X",$midbranch[$i]); , то по получению декодируются в обратный вид функйией HexToStr, типа:

function HexToStr(s:string): string;
..
Result:= Result + Char(StrToInt('$' + s + s[i+1]));



Нужно каким-то образом, передать в одном блоке бинарную и текстовую информацию, типа вот так:

РW2¬µxмСТРОКА_ТЕКСТАЊ‰gи7Й
 

Alkinoy

Начинающий
Re: Пара вопросов от новичка. Please.

Автор оригинала: AllOk
$midbranch[]=strlen($username);
for ($i=0;$i<strlen($username);$i++){
$midbranch[]=$username[$i];}

Где username есть текст.
в итоге получаем в первом элементе массива длина строки (число), в следующих элементах массива - по одной букве из строки. а где же бинарные данные?
ИМХО вы не совсем поняли что код делает (остальной), по этому вопросы получаются не сильно корректные...

сделайте
print_r($midbranch);
после заполнения массива - и покажите, что получилось...

-~{}~ 16.05.08 19:41:

Автор оригинала: AllOk
...то по получению декодируются в обратный вид функйией HexToStr, типа:

function HexToStr(s:string): string;
..
Result:= Result + Char(StrToInt('$' + s + s[i+1]));


не совсем понял - функция, которая из шестнадцатеричного представления должна выдавать строку, но на вход получает строку?

и вот это не совсем понял
StrToInt('$' + s + s[i+1])
 

AllOk

Новичок
Re: Re: Пара вопросов от новичка. Please.

Alkinoy

в итоге получаем в первом элементе массива длина строки (число), в следующих элементах массива - по одной букве из строки. а где же бинарные данные?
Массив $midbranch формируется из разныъ ипостасий:

Заполняется случайными данными:
$block64=array();
for ($i=0;$i<64;$i++){
$block64[]=rand(0,255);

$midbranch=array();
for ($i=0;$i<64;$i++){
$midbranch[]=$block64[$i];



Далее идет текстовая инфа:

$midbranch[]=strlen($username);
for ($i=0;$i<strlen($username);$i++){
$midbranch[]=$username[$i];



Далее идет бинарный файл, который лежит на сайте в каталоге:

$codebin = file_get_contents("file/bin.bin", "r");

for ($i=0;$i<strlen($codebin);$i++){
$midbranch[]=$codebin[$i];
}



Потом он простенько шифруется:

for ($i=0;$i<count($midbranch);$i++){
$midbranch[$i]= $midbranch[$i]^$YY;



И вот если этот массив отдать вот так:

for ($i=0;$i<count($midbranch);$i++){
printf("%02X",$midbranch[$i]);



То после декодирования и расшифровки видно будет только массив случайных байт (самый первый) , весь текст и файл bin.bin будет заменен нулями.

Даже если не шифровать, все одно.

-~{}~ 17.05.08 15:57:

Anybody?
 

dimagolov

Новичок
AllOk
rand возвращает int, это 4 или 8 байт в зависимости от платформы, count - аналогично, а вот символы из строки однобайтные. потом ты делаешь ^ и смотри что там выходит: http://www.php.net/manual/en/language.operators.bitwise.php

при выводе printf("%02X",$midbranch[$i]); у тебя идет преобразование в int, а потом ты выводишь от 2-х до сколько потребуется, то есть до 8 или 16 16-ричных цифр. вот тут имхо и проблема.
 
Сверху