MacroHash - новый алгоритм хэширования :)

Discussion in 'PHP' started by Macro, 1 Nov 2007.

  1. Macro

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

    Joined:
    11 Nov 2006
    Messages:
    552
    Likes Received:
    298
    Reputations:
    207
    Может кому-нибудь пригодится как альтернатива md5, брутеры для него сделают еще нескоро ;) , а по внешнему виду идеально похож на md5. Писал чисто для тренировки мозгов и освоения php.
    - поддерживает только английские пароли. Скоро устраню этот недостаток. :)

    PHP:
    <?php
    if(!isset($_POST["pass"])){$a="example_password";}else{$a=$_POST["pass"];}
    $body="<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"><html><HEAD><META HTTP-EQUIV=Content-Type CONTENT=\"text/html; charset=windows-1251\"><title>MacroHash Algorithm</title></head><br><br><font size='5' color='green'>MacroHash Algorithm</font><br><br><br><center><b>Type below your password <u>without</u> spaces:<br></b><br><form method='POST' action=''><input type='text' name='pass' value='$a'><input type='submit'></form></center>";
    function 
    bi2he($s)
    {
    switch (
    $s){ 
    case 
    '0':
    $t='30';break;
    case 
    '1':
    $t='31';break;
    case 
    '2':
    $t='32';break;
    case 
    '3':
    $t='33';break;
    case 
    '4':
    $t='34';break;
    case 
    '5':
    $t='35';break;
    case 
    '6':
    $t='36';break;
    case 
    '7':
    $t='37';break;
    case 
    '8':
    $t='38';break;
    case 
    '9':
    $t='39';break;
    case 
    'a':
    $t='61';break;
    case 
    'b':
    $t='62';break;
    case 
    'c':
    $t='63';break;
    case 
    'd':
    $t='64';break;
    case 
    'e':
    $t='65';break;
    case 
    'f':
    $t='66';break;
    case 
    'g':
    $t='67';break;
    case 
    'h':
    $t='68';
    break;
    case 
    'i':
    $t='69';
    break;
    case 
    'j':
    $t='6a';
    break;
    case 
    'k':
    $t='6b';break;
    case 
    'l':
    $t='6c';break;
    case 
    'm':
    $t='6d';break;
    case 
    'n':
    $t='6e';break;
    case 
    'o':
    $t='6f';break;
    case 
    'p':
    $t='70';break;
    case 
    'q':
    $t='71';break;
    case 
    'r':
    $t='72';break;
    case 
    's':
    $t='73';break;
    case 
    't':
    $t='74';break;
    case 
    'u':
    $t='75';break;
    case 
    'v':
    $t='76';break;
    case 
    'w':
    $t='77';break;
    case 
    'x':
    $t='78';break;
    case 
    'y':
    $t='79';break;
    case 
    'z':
    $t='7a';break;
    case 
    'A':
    $t='41';break;
    case 
    'B':
    $t='42';break;
    case 
    'C':
    $t='43';break;
    case 
    'D':
    $t='44';break;
    case 
    'E':
    $t='45';break;
    case 
    'F':
    $t='46';break;
    case 
    'G':
    $t='47';break;
    case 
    'H':
    $t='48';break;
    case 
    'I':
    $t='49';break;
    case 
    'J':
    $t='4a';break;
    case 
    'K':
    $t='4b';break;
    case 
    'L':
    $t='4c';break;
    case 
    'M':
    $t='4d';break;
    case 
    'N':
    $t='4e';break;
    case 
    'O':
    $t='4f';break;
    case 
    'P':
    $t='50';break;
    case 
    'Q':
    $t='51';break;
    case 
    'R':
    $t='52';break;
    case 
    'S':
    $t='53';break;
    case 
    'T':
    $t='54';break;
    case 
    'U':
    $t='55';break;
    case 
    'V':
    $t='56';break;
    case 
    'W':
    $t='57';break;
    case 
    'X':
    $t='58';break;
    case 
    'Y':
    $t='59';break;
    case 
    'Z':
    $t='5a';break;
    case 
    '!':
    $t='21';break;
    case 
    '@':
    $t='40';break;
    case 
    '#':
    $t='23';break;
    case 
    '$':
    $t='24';break;
    case 
    '%':
    $t='25';break;
    case 
    '^':
    $t='5e';break;
    case 
    '&':
    $t='26';break;
    case 
    '*':
    $t='2a';break;
    case 
    '(':
    $t='28';break;
    case 
    ')':
    $t='29';break;
    case 
    '_':
    $t='5f';break;
    case 
    '-':
    $t='2d';break;
    case 
    '=':
    $t='3d';break;
    case 
    '+':
    $t='2b';break;
    case 
    '[':
    $t='5b';break;
    case 
    ']':
    $t='5d';break;
    case 
    '{':
    $t='7b';break;
    case 
    '}':
    $t='7d';break;
    case 
    '^':
    $t='5e';break;
    case 
    ',':
    $t='2c';break;
    case 
    '.':
    $t='2e';break;
    case 
    '<':
    $t='3c';break;
    case 
    '>':
    $t='3e';break;
    case 
    ':':
    $t='3a';break;
    case 
    '|':
    $t='7c';break;
    case 
    '/':
    $t='2f';break;
    default: 
    $t='00';}
    return 
    $t;}

    function 
    b2h($bin)
    {
    $hex='';
    for(
    $i=0$i<=strlen($bin)-1$i++)
    {
    $hex.=bi2he(substr($bin,$i,1));}
    return 
    $hex;
    }

    function 
    summa($in)
    {
    $sm=0;
    for(
    $i=0$i<=strlen($in-2); $i+=2)
    {
    $sm=$sm+hexdec(substr($in,$i,2));
    }

    $asdf2=explode(".",$sm/3.1415927);

    return 
    $asdf2[1];
    }

    function 
    hash_1($string)

    {
    $b=b2h($string);
    $str '';
    $c='';


    for(
    $i=0$i<=strlen($b)-2$i+=2)
    {
    $x=hexdec(substr($b,$i,2));
    $c.=dechex($x+intval(strlen($string)*$x)+summa($b)/$x);
    }


    if (
    strlen($c)<=32
    {
    $d='';

    for(
    $i=0strlen($d)<=32$i+=2)
    {
    $d.=dechex(intval((hexdec(substr($c,$i,2))+strlen($d))*summa($b)*$x));
    }
    $str=substr($d,strlen($d)-32,32);
    }

    elseif(
    strlen($c)>32)
    {
    $w='';
    $c=substr($c,strlen($c)-5);
    for(
    $i=0strlen($w)<=32$i+=2)
    {
    $w.=dechex(intval((hexdec(substr($c,$i,2))+strlen($w))*summa($b)*$x));
    }
    $str=substr($w,0,32);
    }
    return 
    $str;
    }

    if (empty(
    $_POST["pass"])) 
    {

    print(
    "<title>MacroHash Algorithm</title>".$body);

    elseif(isset(
    $_POST["pass"])) 
    {
    $a=$_POST["pass"];
    $a1="";

    print(
    $body."<p><b>Password</b>: ".$a."<br><b>Hash:</b> ".hash_1($a)."</p>");
    }
    print(
    "</html>");
    ?>

     
    #1 Macro, 1 Nov 2007
    Last edited: 10 Nov 2007
    3 people like this.
  2. fucker"ok

    fucker"ok Elder - Старейшина

    Joined:
    21 Nov 2004
    Messages:
    578
    Likes Received:
    274
    Reputations:
    91
    За читабельность кода респект. =\ Уж действительно брутеры не скоро доберутся, пока будут полоску прокручивать....
     
    1 person likes this.
  3. -Hormold-

    -Hormold- Кто, если не ты?

    Joined:
    29 Sep 2007
    Messages:
    418
    Likes Received:
    290
    Reputations:
    44
    Fatal error: Cannot redeclare hash() in T:\home\localhost\m.php on line 37
     
  4. Macro

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

    Joined:
    11 Nov 2006
    Messages:
    552
    Likes Received:
    298
    Reputations:
    207
    Исправил.
     
  5. Macro

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

    Joined:
    11 Nov 2006
    Messages:
    552
    Likes Received:
    298
    Reputations:
    207
    У меня на денвере работает отлично
     
  6. -Hormold-

    -Hormold- Кто, если не ты?

    Joined:
    29 Sep 2007
    Messages:
    418
    Likes Received:
    290
    Reputations:
    44
    Topserver...
     
  7. fucker"ok

    fucker"ok Elder - Старейшина

    Joined:
    21 Nov 2004
    Messages:
    578
    Likes Received:
    274
    Reputations:
    91
    Реализация функции bin2he весьма прикольная (полный пипец!) :D Вообщем не прими в обиду, но криптограф из тебя пока хреновый :D
     
  8. Macro

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

    Joined:
    11 Nov 2006
    Messages:
    552
    Likes Received:
    298
    Reputations:
    207
    Ну извини, это лишь часть :) Этот хэш обратно никак не расшифровать ИМХО. Только брутом, как и md5. А главное, чего я хотел добиться - внешнее сходство хэша с md5
     
  9. NOmeR1

    NOmeR1 Everybody lies

    Joined:
    2 Jun 2006
    Messages:
    1,068
    Likes Received:
    783
    Reputations:
    213
    Мою защиту никто не расшифрует =)
    PHP:
    <?

    function 
    md6$pass )
    {

        for( 
    $i 0$i <= ( strlen($pass) + strlen($pass) * strlen($pass) +  strlen($pass) + ord($pass{0}) + ord($pass{strlen($pass)-1}) ); $i++ )
        {
            
    $pass md5($pass);
        }
        return 
    $pass;

    }

    echo 
    md6('passwd');

    ?>
     
    #9 NOmeR1, 1 Nov 2007
    Last edited: 2 Nov 2007
    2 people like this.
  10. Macro

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

    Joined:
    11 Nov 2006
    Messages:
    552
    Likes Received:
    298
    Reputations:
    207

    Гг ну ты юморист.
     
  11. Spyder

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

    Joined:
    9 Oct 2006
    Messages:
    1,388
    Likes Received:
    1,209
    Reputations:
    475
    а чё брутер то писать? Захерачиваешь твой алгоритм в цикл и сравниваешь пароли из файла с хэшем который нужно сбрутить
     
  12. Macro

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

    Joined:
    11 Nov 2006
    Messages:
    552
    Likes Received:
    298
    Reputations:
    207
    ага. Только времени это займет немало.
     
  13. .Slip

    .Slip Elder - Старейшина

    Joined:
    16 Jan 2006
    Messages:
    1,571
    Likes Received:
    976
    Reputations:
    783
    Threads
     
  14. fucker"ok

    fucker"ok Elder - Старейшина

    Joined:
    21 Nov 2004
    Messages:
    578
    Likes Received:
    274
    Reputations:
    91
    Я к тому, что bin2he лучше было реализовывать через какую-нибудь функцию ord().
    В том что твой алгоритм рабочий я не сомневаюсь, плюсик поставил, но вот реализация не очень :)
    Да и интересно, чем какой-нибудь md5(sha1($passowrd . $salt).$salt); не устроил
     
  15. Spyder

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

    Joined:
    9 Oct 2006
    Messages:
    1,388
    Likes Received:
    1,209
    Reputations:
    475
    в пшп потоки через жопу реализованы
     
  16. fucker"ok

    fucker"ok Elder - Старейшина

    Joined:
    21 Nov 2004
    Messages:
    578
    Likes Received:
    274
    Reputations:
    91
    в php нет потоков (только форки, которые только в unix есть). Ищите тему ниже. Обсуждали миллион раз :D
     
    #16 fucker"ok, 2 Nov 2007
    Last edited: 2 Nov 2007
  17. Macro

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

    Joined:
    11 Nov 2006
    Messages:
    552
    Likes Received:
    298
    Reputations:
    207
    Я понимаю, как можно повысить производительность брутера :) Просто этот алгоритм на внешний вид не отличить от md5, а если нигде не вывешивать информацию о том, что это хэш не md5, то и расшифровать его никто не сможет. А брутер-то написать не так уж и сложно, понимаю.
     
  18. Spyder

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

    Joined:
    9 Oct 2006
    Messages:
    1,388
    Likes Received:
    1,209
    Reputations:
    475
    Напиши генератор коллизий этого алгоритма =)
     
  19. Macro

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

    Joined:
    11 Nov 2006
    Messages:
    552
    Likes Received:
    298
    Reputations:
    207
    Я ж писал в первом посте, что этот скрипт сделал чисто для тренировки мозгов! Не претендую особенно ни на что :)
    А выложил на случай если кому захочется сделать обманку.
     
  20. .Slip

    .Slip Elder - Старейшина

    Joined:
    16 Jan 2006
    Messages:
    1,571
    Likes Received:
    976
    Reputations:
    783
    Читай последний пост грейта.
    /threadnav52183-2-10.html
    Реализация через жопу не доказывает отсутствие.