Может кому-нибудь пригодится как альтернатива 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=0; strlen($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=0; strlen($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>"); ?>
За читабельность кода респект. =\ Уж действительно брутеры не скоро доберутся, пока будут полоску прокручивать....
Реализация функции bin2he весьма прикольная (полный пипец!) Вообщем не прими в обиду, но криптограф из тебя пока хреновый
Ну извини, это лишь часть Этот хэш обратно никак не расшифровать ИМХО. Только брутом, как и md5. А главное, чего я хотел добиться - внешнее сходство хэша с md5
Мою защиту никто не расшифрует =) 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'); ?>
а чё брутер то писать? Захерачиваешь твой алгоритм в цикл и сравниваешь пароли из файла с хэшем который нужно сбрутить
Я к тому, что bin2he лучше было реализовывать через какую-нибудь функцию ord(). В том что твой алгоритм рабочий я не сомневаюсь, плюсик поставил, но вот реализация не очень Да и интересно, чем какой-нибудь md5(sha1($passowrd . $salt).$salt); не устроил
Я понимаю, как можно повысить производительность брутера Просто этот алгоритм на внешний вид не отличить от md5, а если нигде не вывешивать информацию о том, что это хэш не md5, то и расшифровать его никто не сможет. А брутер-то написать не так уж и сложно, понимаю.
Я ж писал в первом посте, что этот скрипт сделал чисто для тренировки мозгов! Не претендую особенно ни на что А выложил на случай если кому захочется сделать обманку.
Читай последний пост грейта. /threadnav52183-2-10.html Реализация через жопу не доказывает отсутствие.