За последние 24 часа нас посетили 72705 программистов и 1650 роботов. Сейчас ищут 910 программистов ...

конвертор строки в хеш

Тема в разделе "Прочие вопросы по PHP", создана пользователем rewuxiin, 7 авг 2014.

  1. rewuxiin

    rewuxiin Активный пользователь

    С нами с:
    17 апр 2012
    Сообщения:
    611
    Симпатии:
    87
    возникла задача, прошу натолкнуть на мысль - что использовать

    необходимо строку, длинной до 1000 символов, преобразовать в 16-ти символьный uuid - что бы можно было получить одно из другого и обратно, соответственно uuid должен генерироваться каждый раз одного и того же слова в одинаковый.

    функции конвертирования из-за длинны строки использовать не получается, microtime для создания случайного отпадает.

    чешу "репу")
     
  2. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    md5, hash
     
  3. rewuxiin

    rewuxiin Активный пользователь

    С нами с:
    17 апр 2012
    Сообщения:
    611
    Симпатии:
    87
    а в 16 символов как ужаться из 32?
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    вот это никак не получится, хеширование необратимо
     
  5. rewuxiin

    rewuxiin Активный пользователь

    С нами с:
    17 апр 2012
    Сообщения:
    611
    Симпатии:
    87
    ну это можно опустить
     
  6. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    substr
     
  7. rewuxiin

    rewuxiin Активный пользователь

    С нами с:
    17 апр 2012
    Сообщения:
    611
    Симпатии:
    87
    и через какое колличество значений первые или последние 16 символов совпадут с другим значением?
     
  8. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    А почему 16?
     
  10. rewuxiin

    rewuxiin Активный пользователь

    С нами с:
    17 апр 2012
    Сообщения:
    611
    Симпатии:
    87
    видимо для экономии базы данных, такая вот задача
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Ну это можно обсудить с тем, кто так решил. Или можно бинарное поле заюзать. Некоторые хеш функции умеют бинарный вариант возвращать. Будет 16 байт. Или хотя бы маленькие и большие буквы плюс символы.
     
  12. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    md5 это как раз 16 байт
    Код (PHP):
    1. function hash2chars($hash) {
    2.  $chars = '';
    3.  for ($i = 0; $i < strlen($hash); $i+=2) {
    4.   $chars .= chr(hexdec('0x' . substr($hash, $i, 2)));
    5.  }
    6.  return $chars;
    7. }
    8.  
    9. function chars2hash($chars) {
    10.  $hash = '';
    11.  for ($i = 0; $i < strlen($chars); $i++) {
    12.   $hash .=  str_pad(dechex(ord($chars[$i])), 2, '0', STR_PAD_LEFT);
    13.  }
    14.  return $hash;
    15. }
    16.  
    17. $hash = md5('vasya');
    18. $chars16 = hash2chars($hash);
    19. var_dump($chars16);
    20. var_dump($hash == chars2hash($chars16));
     
  13. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    для сравнения хеша с его прототипом, просто прогони прототип повторно через хешфункцию и сравни результаты. В обратку нельзя просто взять и размотать, увы.
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    http://ru2.php.%6eet/manual/en/function.hash.php

    Код (PHP):
    1. echo hash('md5', 'aaa', true); // G���OX�Hg��~���  
    сразу получаешь 16 байт
     
  15. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    xD

    Добавлено спустя 34 секунды:
    мы не ищем легких путей!
     
  16. rewuxiin

    rewuxiin Активный пользователь

    С нами с:
    17 апр 2012
    Сообщения:
    611
    Симпатии:
    87
    ну почти profit))

    Добавлено спустя 59 секунд:
    да, так и собирался, в примере мануала уже подглядел)
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    почему почти? задача решена
     
  18. rewuxiin

    rewuxiin Активный пользователь

    С нами с:
    17 апр 2012
    Сообщения:
    611
    Симпатии:
    87
    хеш то из кириллицы получается, я конечно в старпосте на это упор не делал)) но все же с кириллические символы не пойдуть
     
  19. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
  20. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    При чем тут кириллица - не кириллица? Это байты. В один байт записывается любой из 256 символов, а не только двадцать латинских
     
  21. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Нео, то, что ты видишь - лишь иллюзия. Символов не существует. Это машина транслирует так байтовую последовательность тебе в мозг посредством вьюпорта браузера. Сосредоточься, Нео, посмотри глубже и ты узришь истину. На правой ладони у меня браузер, на левой - hex-вьювер. Выбери правую и ты останешься обычным пользователем, все произошедшее покажется тебе бредом и ты продолжишь жить обычной жизнью. Выбери левую и я покажу тебе, насколько глубока эта кроличья нора...
     
  22. rewuxiin

    rewuxiin Активный пользователь

    С нами с:
    17 апр 2012
    Сообщения:
    611
    Симпатии:
    87
    хм, пойду "догонять"
    в любом случае, спасибо за помощь))