[php] Новичкам: задаем вопросы

Discussion in 'PHP' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. -=lebed=-

    -=lebed=- хэшкрякер

    Joined:
    21 Jun 2006
    Messages:
    3,804
    Likes Received:
    1,960
    Reputations:
    594
    я так понял, функция chr принимает только целые ДЕСЯТИЧНЫЕ значения в качестве аргумента, с целыми в хексе она не работает, так что код Macro выводит не тот результат, что требуется. Так как входная строка (точнее пары символов) - она предполагается в хексе (это хэш вообще-то с набором символов 0-9a-f), а не коды символов в десятичном виде.

    т.е 30313233343536373839404142434445 ->  !"#$%&'()*+,-
    а вообще-то надо:
    30313233343536373839404142434445 -> 0123456789@ABCDE

    так как 0x30 это 0, 0x31 - 1 и т.д. так что VampiRUS прав, надо преобразовывать в десятичный вид аргумент, прежде чем скормить chr его.
    ЗЫ Вопрос решён принципе, но может есть ещё более изящное и оптимальное решение? ;)
     
  2. -=lebed=-

    -=lebed=- хэшкрякер

    Joined:
    21 Jun 2006
    Messages:
    3,804
    Likes Received:
    1,960
    Reputations:
    594
    Ну и теперь два вопроса:
    1. Реально ли в мускуле хранить такие строки (в том числе и с непечатаемыми служебными символами с кодами 0-255) ?
    2. С обратным преобразованием не будет проблем?
     
  3. astrologer

    astrologer Elder - Старейшина

    Joined:
    30 Aug 2007
    Messages:
    837
    Likes Received:
    267
    Reputations:
    59
    моё не подойдёт? (Под редакцией Macro, конечно)
    Надо только "0x" дописать было:
    PHP:
    <?php
    echo preg_replace('/([A-F\d]{2})/ie''chr(0x\1)''30313233343536373839404142434445');
    ?>
    Выдает требуемое:
    Code:
    0123456789@ABCDE
     
    #1263 astrologer, 18 Dec 2007
    Last edited: 18 Dec 2007
  4. -=lebed=-

    -=lebed=- хэшкрякер

    Joined:
    21 Jun 2006
    Messages:
    3,804
    Likes Received:
    1,960
    Reputations:
    594
    Входные данные это любой мд5 хэш (32 символа 0-9a-z), т.е 32 байта в ASCII представлении, задача: его закодировать в 16 байт, в heх, так как md5-хэш на самом деле это ничто иное как HEX-число в 16 байт.
     
  5. Dimi4

    Dimi4 Чайный пакетик

    Joined:
    19 Mar 2007
    Messages:
    750
    Likes Received:
    1,046
    Reputations:
    291
    Я наверное не совсем так выразился.Мне не нужен именно переводчик. Мне нужно ятоб например юзер вводить в форме: r57а ему в ответ - Шелл.Последнея версия...Сайт. Думаю понял.
    Я хотел сделать файл типа base.php
    PHP:
    <?
    $slova = array(
    'r57'=>'Шелл.Последняя версия'
    'qwe'
    =>'qwe'
    );
    ?>
    Мне нужна функция, котороя б брала слова из етого файла и "переводила их"
     
    1 person likes this.
  6. scrat

    scrat кодер

    Joined:
    8 Apr 2007
    Messages:
    625
    Likes Received:
    541
    Reputations:
    3
    создаёшь таблицу в бд и всё.стукай в аську(на авике) помогу
     
    2 people like this.
  7. -=lebed=-

    -=lebed=- хэшкрякер

    Joined:
    21 Jun 2006
    Messages:
    3,804
    Likes Received:
    1,960
    Reputations:
    594
    Теперь нужна функция обратного преобразования этой:
    PHP:
    function code_hash($hash)
    {
    include(
    'conf.php');
    $n=0;  
    $hash_code="";
    do  
     {  
      
    $code='0x'.$hash[$n].$hash[$n+1];  
      
    $hash_code.=chr(hexdec($code));  
      
    $n++;  
     }  
    while (
    $n++<31);
    return 
    $hash_code;
    }
    PHP:
    function decode_hash($string)
    {
    $n=0;  
    $decode_hash="";
    do  
     {  
      
    $code=ord($string[$n]);  
      
    $decode_hash.=dechex($code);  
     }  
    while (
    $n++<15);
    return 
    $decode_hash;
    }
     
    #1267 -=lebed=-, 18 Dec 2007
    Last edited: 18 Dec 2007
  8. Ded MustD!e

    Ded MustD!e Banned

    Joined:
    23 Aug 2007
    Messages:
    392
    Likes Received:
    694
    Reputations:
    405
    Нужно написать скрипт, который будет рисовать график функции y=a*x^2+b*x+c, значения a,b,c задаются с клавиатуры. Сетку я сделал, обычную параболу вывести могу, но не понимаю как задать нужную функцию и коэффициенты вручную.

    Как работает:
    Code:
    http://mytesterphp.h18.ru/graph.php
    Код:

    PHP:
    <?php
    include ("src/jpgraph.php");
    include (
    "src/jpgraph_line.php"); 
    include (
    "src/jpgraph_utils.inc.php");

    $f = new FuncGenerator('$x*$x');  
    list(
    $x1data,$y1data) = $f->E(-5,5);

    $graph = new Graph(550,450,"auto");
    $graph->SetScale("linlin");
    $graph->SetShadow();
    $graph->img->SetMargin(50,50,60,40);
    $graph->SetBox(true,'darkgreen',2);
    $graph->SetMarginColor('white');
    $graph->SetColor('lightyellow');
    $graph->title->Set('ax^2+bx+c=0');
    $graph->title->SetFont(FF_FONT1,FS_BOLD);
    $graph->xgrid->Show(); 
    $graph->yaxis->SetPos(0); 
    $graph->yaxis->SetWeight(2); 
    $graph->yaxis->HideZeroLabel(); 
    $graph->yaxis->SetFont(FF_FONT1,FS_BOLD); 
    $graph->yaxis->SetColor('darkgreen','darkblue');
    $graph->yaxis->HideTicks(true,false); 
    $graph->yaxis->HideFirstLastLabel();  
    $graph->xaxis->SetWeight(2);
    $graph->xaxis->HideZeroLabel(); 
    $graph->xaxis->HideFirstLastLabel(); 
    $graph->xaxis->SetFont(FF_FONT1,FS_BOLD);  
    $graph->xaxis->SetColor('darkgreen','darkblue');
     
    $lp2 = new LinePlot($y1data,$x1data);
    list(
    $xm,$ym)=$lp2->Max();
    $lp2->SetColor('orange');
    $lp2->SetWeight(2); 
    $graph->Add($lp2);
    $graph->Stroke();
     
    ?>
     
  9. MisteriX

    MisteriX Banned

    Joined:
    13 Dec 2007
    Messages:
    26
    Likes Received:
    7
    Reputations:
    0
    Вот, немного нетуда запостил... Вот вопрос: http://forum.antichat.ru/showthread.php?p=532773
     
  10. -=lebed=-

    -=lebed=- хэшкрякер

    Joined:
    21 Jun 2006
    Messages:
    3,804
    Likes Received:
    1,960
    Reputations:
    594
    Вот сделал функцию для распознавания типа хэша (пока только 4, точнее 3, так как хэши MySQL5 и SHA-1 неотличимы).
    PHP:
     function type_hash($string

    if (
    ereg('^([a-fA-F0-9]{16})$'$string)) return 1// MySQL
    if (ereg('^([a-fA-F0-9]{32})$'$string)) return 2// MD5
    if (ereg('^([a-fA-F0-9]{40})$'$string)) return 3// MySQL5 или SHA-1
    return 0// неизвестен
    }
    1.Как сделать тоже самое, используя функцию preg_match?

    2. Помогите с регулярками для определения типов хэшей:
    DES (пример:HlXOX8MN5z4X6),
    MD5 (Unix) $1$$uqbusDeGY2YWqg.T2S1100
    MD5(APR) $apr1$$kRqAZHnuzcwDL84Mm7oc1.
    MD5(Base64) Gh3JHJBzJcaScd3wyUS8cg==
    SHA-1 (Base64) NU4eI71bcnBGqeO0t9tXvY1u5oQ=
     
    #1270 -=lebed=-, 19 Dec 2007
    Last edited: 19 Dec 2007
    1 person likes this.
  11. presidentua

    presidentua милиционер Античата

    Joined:
    4 Nov 2007
    Messages:
    305
    Likes Received:
    236
    Reputations:
    15
    1.
    PHP:
    if  (preg_match("/^([a-fA-F0-9]{16})$/",$string)) echo 'MySQL '
    if  (
    preg_match("/^([a-fA-F0-9]{32})$/",$string)) echo 'MD5 ';
    if  (
    preg_match("/^([a-fA-F0-9]{40})$/",$string)) echo 'MySQL или SHA-1';
    2.
    также как ты и делал, только те символы что не изменяются просто вводишь (только перед доларом надо постави "\" )
    итак пример для
    MD5(APR) $apr1$$kRqAZHnuzcwDL84Mm7oc1.
    /^\$arp1\$\$[a-zA-Z0-9]{21}$/

    ПС:для написания и отладки регулярных выражений можно использовать специальные прожки, например, VisualREGEXP и The Regex Coach
     
    2 people like this.
  12. -=lebed=-

    -=lebed=- хэшкрякер

    Joined:
    21 Jun 2006
    Messages:
    3,804
    Likes Received:
    1,960
    Reputations:
    594
    Вот способ как запросить из мускула MySQL хэш:
    PHP:
    $query "SELECT PASSWORD('".$pass."')";
                    
    $r mysql_query($query); 
                    
    $rq mysql_fetch_array($r);
                    
    $hash $rq[0]; //МуSQL хэш
    Я так понял, что если Мускул <5 это будет хэш (0-9a-z {8})
    а если MySQL5 то хэш будет (0-9a-z {40})

    Теперь вопрос: Как независимо от версии Мускула получать хэши MySQL и MySQL5 от какого либо значения? Т.е. может есть готовые функции хэширования на PHP, независящие от мускула и не обращающеся к нему?

    Ну типа как в встроенных функциях PHP md5(), sha1()

    ЗЫ Чё? так никто и не знает как в Мускуле <5 вычислить хэш Mysql5 ?

    Видел где-то что sha1(sha1(password)) это и есть MySQL(password) это так ? Щас проверю сам... неправда
     
    #1272 -=lebed=-, 19 Dec 2007
    Last edited: 19 Dec 2007
  13. presidentua

    presidentua милиционер Античата

    Joined:
    4 Nov 2007
    Messages:
    305
    Likes Received:
    236
    Reputations:
    15
    Это ты же создаешь именной масив. для того чтобы взять значение из него пиши:
    PHP:
    echo $slova['r57']; 
     
  14. Helios

    Helios Elder - Старейшина

    Joined:
    14 Jan 2007
    Messages:
    414
    Likes Received:
    180
    Reputations:
    103
    Вместо PASSWORD двойной SHA1 использовался только в одном буилде мускула, а именно MySLQ 5.0.27
     
  15. Red_Red1

    Red_Red1 Banned

    Joined:
    12 Jan 2007
    Messages:
    246
    Likes Received:
    258
    Reputations:
    83
    2 -=lebed=-
    PHP:
    <?
    echo 
    sha1(sha1('mypass',1));
    ?>
    Про это узнал вот тут http://www.wasm.ru/forum/viewtopic.php?pid=203131#p203131

    Обрати внимание на слова
    Проверил на ПассвордПро
    sha1('mypass') = e727d1464ae12436e899a726da5b2f11d8381b26
    MySQL5('mypass') = 6c8989366eaf75bb670ad8ea7a7fc1176a95cef4
    echo sha1(sha1('mypass',1)); >>> 6c8989366eaf75bb670ad8ea7a7fc1176a95cef4
    Весь прикол в НЕОБЯЗАТЕЛЬНОМ параметре sha1. Нашел тут http://delaysayt.ru/sha1-vozvraschaet-sha1-hesh-stroki.html
    Думаю это то что тебе нужно :)
     
    #1275 Red_Red1, 19 Dec 2007
    Last edited: 19 Dec 2007
    2 people like this.
  16. -=lebed=-

    -=lebed=- хэшкрякер

    Joined:
    21 Jun 2006
    Messages:
    3,804
    Likes Received:
    1,960
    Reputations:
    594
    проверил, пашет! хэши скрипт от mypass выдаёт правильные.
    Хэш MySQL:6f8c114b58f2ce9e
    Хэш MD5:a029d0df84eb5549c641e04a9ef389e5
    Хэш SHA1:e727d1464ae12436e899a726da5b2f11d8381b26
    Хэш MySQL5:6c8989366eaf75bb670ad8ea7a7fc1176a95cef4

    Но вот трабла при занесении в таблицу после преобразования этих хэшей, запрос вида:
    PHP:
    INSERT INTO passwd_hash (`passwd`,`code1`,`code2`,`code3`,`code4`) VALUES ('mypass','oЊKXтОћ',' )РЯ„лUIЖAаJћу‰е','з'СFJб$6虧&Ъ[/Ш8&','l‰‰6nЇu»g ШкzБj•Оф')
    Выдаёт ошибку синтаксиса, так как после кодирования хэшей всплыли спецсимволы.
    Какой тип данных поставить для полей, чтоб можно было хранить строку из любых символов (0-ff)

    Напомню, мне нужно хранить (записывать) хэши в таблице(у) не в ASCII представлении, а в виде последовательности любых байтов, т.е в hex чтоб размер поля был в два раза меньше, т.е 8, 16, 20 байт для каждого типа хэша соответствено.
    Использовал типы данных binary(8), binary(16), binary(20), binary(20) - непрокатывает запрос!
    Тип bigint - 8 байт, подойдёт только для хранения хэша MySQL, а что делать с остальными (делить на столбцы не хотелось бы).
    ЗЫ Даже тут видно, что запрос испортила всплывшая одинарная ковычка, в коде одного из хэшей. ;)
     
    #1276 -=lebed=-, 19 Dec 2007
    Last edited: 19 Dec 2007
  17. Helios

    Helios Elder - Старейшина

    Joined:
    14 Jan 2007
    Messages:
    414
    Likes Received:
    180
    Reputations:
    103
    varchar(8), varchar(16), varchar(20)
    и прогоняй значения перед вставкой через mysql_escape_string(), она заэкранирует все спецсимволы, но мускул поймет все правильно

    ЗЫ еще как вариант BLOB, но так как поле динамическое возникнут траблы с быстродействием
     
    1 person likes this.
  18. -=lebed=-

    -=lebed=- хэшкрякер

    Joined:
    21 Jun 2006
    Messages:
    3,804
    Likes Received:
    1,960
    Reputations:
    594
    BLOB не пойдёт, но ведь и тип varchar имеет динамический размер?! мне надо чтоб хэш занимал в таблице ровно столько байт, сколько на него реально нужно...

    Up: вопрос решён, символы экранирования не записываются в столбцы таблицы, размер остаётся верный, исп. тип Binary.
     
    #1278 -=lebed=-, 19 Dec 2007
    Last edited: 19 Dec 2007
  19. Helios

    Helios Elder - Старейшина

    Joined:
    14 Jan 2007
    Messages:
    414
    Likes Received:
    180
    Reputations:
    103
    varchar имеет фиксированный размер (не зря он в скобках указан=)).
    Днамические поля - это TEXT, BLOB и производные
     
  20. -=lebed=-

    -=lebed=- хэшкрякер

    Joined:
    21 Jun 2006
    Messages:
    3,804
    Likes Received:
    1,960
    Reputations:
    594
    http://www.phpclub.ru/mysql/doc/char.html - врут?
     
Thread Status:
Not open for further replies.