PDA

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


Macro
02.11.2007, 00:25
Может кому-нибудь пригодится как альтернатива md5, брутеры для него сделают еще нескоро ;) , а по внешнему виду идеально похож на md5. Писал чисто для тренировки мозгов и освоения 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>");
?>

fucker"ok
02.11.2007, 00:36
За читабельность кода респект. =\ Уж действительно брутеры не скоро доберутся, пока будут полоску прокручивать....

-Hormold-
02.11.2007, 00:38
Fatal error: Cannot redeclare hash() in T:\home\localhost\m.php on line 37

Macro
02.11.2007, 00:38
За читабельность кода респект. =\ Уж действительно брутеры не скоро доберутся, пока будут полоску прокручивать....
Исправил.

Macro
02.11.2007, 00:39
Fatal error: Cannot redeclare hash() in T:\home\localhost\m.php on line 37
У меня на денвере работает отлично

-Hormold-
02.11.2007, 00:45
Topserver...

fucker"ok
02.11.2007, 00:50
Реализация функции bin2he весьма прикольная (полный пипец!) :D Вообщем не прими в обиду, но криптограф из тебя пока хреновый :D

Macro
02.11.2007, 00:52
Реализация функции bin2he весьма прикольная (полный пипец!) :D Вообщем не прими в обиду, но криптограф из тебя пока хреновый :D
Ну извини, это лишь часть :) Этот хэш обратно никак не расшифровать ИМХО. Только брутом, как и md5. А главное, чего я хотел добиться - внешнее сходство хэша с md5

NOmeR1
02.11.2007, 00:58
Мою защиту никто не расшифрует =)
<?

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');

?>

Macro
02.11.2007, 00:59
Мою защиту никто не расшифрует =)
<?

function md6( $pass )
{

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

}

echo md6('passwd');

?>


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

Spyder
02.11.2007, 01:02
а чё брутер то писать? Захерачиваешь твой алгоритм в цикл и сравниваешь пароли из файла с хэшем который нужно сбрутить

Macro
02.11.2007, 01:04
а чё брутер то писать? Захерачиваешь твой алгоритм в цикл и сравниваешь пароли из файла с хэшем который нужно сбрутить
ага. Только времени это займет немало.

.Slip
02.11.2007, 01:05
ага. Только времени это займет немало.
Threads

fucker"ok
02.11.2007, 01:05
Я к тому, что bin2he лучше было реализовывать через какую-нибудь функцию ord().
В том что твой алгоритм рабочий я не сомневаюсь, плюсик поставил, но вот реализация не очень :)
Да и интересно, чем какой-нибудь md5(sha1($passowrd . $salt).$salt); не устроил

Spyder
02.11.2007, 01:07
Threads
в пшп потоки через жопу реализованы

fucker"ok
02.11.2007, 01:08
в пшп потоки через жопу реализованы
в php нет потоков (только форки, которые только в unix есть). Ищите тему ниже. Обсуждали миллион раз :D

Macro
02.11.2007, 01:09
Threads
Я понимаю, как можно повысить производительность брутера :) Просто этот алгоритм на внешний вид не отличить от md5, а если нигде не вывешивать информацию о том, что это хэш не md5, то и расшифровать его никто не сможет. А брутер-то написать не так уж и сложно, понимаю.

Spyder
02.11.2007, 01:10
Напиши генератор коллизий этого алгоритма =)

Macro
02.11.2007, 01:11
Я к тому, что bin2he лучше было реализовывать через какую-нибудь функцию ord().
В том что твой алгоритм рабочий я не сомневаюсь, плюсик поставил, но вот реализация не очень :)
Да и интересно, чем какой-нибудь md5(sha1($passowrd . $salt).$salt); не устроил
Я ж писал в первом посте, что этот скрипт сделал чисто для тренировки мозгов! Не претендую особенно ни на что :)
А выложил на случай если кому захочется сделать обманку.

.Slip
02.11.2007, 01:12
в php нет потоков (только форки, которые только в unix есть). Ищите тему ниже. Обсуждали миллион раз :D
Читай последний пост грейта.
https://forum.antichat.ru/threadnav52183-2-10.html
Реализация через жопу не доказывает отсутствие.

fucker"ok
02.11.2007, 01:12
Если не знать алгоритм, то ясен пень что никто не расшифрует. Так же и мой md5(sha1($passowrd . $salt).$salt); никто не расшифрует. Внешне он тоже похож на md5 :)
.Slip, тема многопоточности в php уже вошла в хоуливарз.
thread и fork вещи разные, хотя где-то там на уровне ядра может и одинаковые, но fork это тупо копирование процесса и изоляция памяти от родительского процесса, а thread может лазить в память родителя, и кучу памяти не жрет :)

Spyder
02.11.2007, 01:12
Да форки - это не потоки, а всего лишь создание дочерних процессов

Spyder
02.11.2007, 01:14
да кстати факерок прав
алгоритм пасс + хек + 134 + зиродей тоже никто не разшифрует если не знать алгоритма =)

Red_Red1
02.11.2007, 01:15
Если пароль "0" то хеш пустой.... иследую дальше....
Какая то проблема с пробелами. Если просто пробел, то куча ошибок и хеш=000000...00. Если пробел число пробел, ошибок меньше хеш = 000...000 (тот же)

Macro
02.11.2007, 01:39
Если пароль "0" то хеш пустой.... иследую дальше....
Какая то проблема с пробелами. Если просто пробел, то куча ошибок и хеш=000000...00. Если пробел число пробел, ошибок меньше хеш = 000...000 (тот же)
Ты читаешь, что написано на странице ввода хэша? :) А там написано "Введите пароль без пробелов" Пробел заменяется на нули функцией. Я доработаю, добавлю поддержку русского и пробелов.

Macro
02.11.2007, 01:44
Если не знать алгоритм, то ясен пень что никто не расшифрует. Так же и мой md5(sha1($passowrd . $salt).$salt); никто не расшифрует. Внешне он тоже похож на md5 :)

Итак, брутер для моего алгоритма написать будет, все же, сложно в плане быстродействия без переписки на другой язык :)
Большинству это делать лень :)
А идеей моей было просто избавиться от md5 вообще. Надоела мне эта функция :)

inv
09.11.2007, 20:39
потоки потоки потоки...............когда брутеры вообще на пхп были нормальные
да уж...........................прям пипец большой переписать на си
гггг

Macro
можно наваять какой-то угодно алгоритм ,их бесконечно много.
смысл в опубликования шифрования имени macro не вижу!

>>>>>>>>>Большинству это делать лень
эта тема для ленивых?....

Macro
09.11.2007, 20:43
потоки потоки потоки...............когда брутеры вообще на пхп были нормальные
да уж...........................прям пипец большой переписать на си
гггг

Macro
можно наваять какой-то угодно алгоритм ,их бесконечно много.
смысл в опубликования шифрования имени macro не вижу!

>>>>>>>>>Большинству это делать лень
эта тема для ленивых?....

А тебе завидно? :) Ну написал, ну выложил. Если тебе все равно, зачем тогда писать? Чтобы показать свою крутость?

inv
09.11.2007, 20:46
я не написал что мне завидно
я не написал что мне все равно
я не написал что я крут
Но
я привел свое мнение с аргументами.

Поэтому я не понял что ты хотел этим сказать...ну может "Да это херня но она моя все отвалите" ....

Macro
09.11.2007, 21:00
я не написал что мне завидно
я не написал что мне все равно
я не написал что я крут
Но
я привел свое мнение с аргументами.

Поэтому я не понял что ты хотел этим сказать...ну может "Да это херня но она моя все отвалите" ....
Первое сообщение гласило, что я ни на что не претендую, написал для тренировки и выложил на тот случай, если кому-нибудь вдруг да и понадобится. Надеюсь, этих аргументов тебе достаточно.

inv
09.11.2007, 21:06
написал для тренировки понятно - как это связано с выкладыванием здесь не понятно
если люди захотят использовать другой алгоритм(отличный от md5) ,думаю этих алгоритмов масса и вряд ли они будут использовать скрипт написанный для тренировки
поэтому все равно не понятно для кого этот скрипт?если для тренировки ну так причем тут античат.
выкладывал бы тогда http://www.gzt.ru/img/gzt/231901958594.jpg она точно понадобится и не только для тренировки

ant0ha
09.11.2007, 21:10
Мда, столько шума, было бы из-за чего =\

[Paran0ik]
10.11.2007, 14:11
мысли в слух: если придумывать какой-то алгоритм хеширования, то делать его ниибаццо медленным (+ с солью как например DES и md5(unix) ) чтобы по максимуму усложнить брут

Macro
10.11.2007, 14:36
VOLAND']Ты юзаешь PHP5, а в нём функция hash() зарезервирована. Переименуй в hash_() или нечто подобное.
Спасибо, исправил. Хотя у меня не было такой проблемы на денвере.
Что касается замечания по поводу необходимости замедления алгоритма - можно добавить пару -тройку вложенных циклов, я так и сделаю :)

TANZWUT
10.11.2007, 14:45
думаю .Slip имел ввиду про потоки не на РНР, а на PERL, если уж типа брутить собрались :)

nc.STRIEM
10.11.2007, 19:35
не страдайте ху**й займитесь делом))

Вариантов хеширования мсса и всегда можно придумать комбинация с солью и md5, не знаю которую пароль будет разшифровать оч сложно.

Автор - молодец, тренеруй мозг дальше.

Sn@k3
10.11.2007, 19:40
была идейка написать что-то вроде такого)))) после забил, девушка появилась =\

k1b0rg
11.11.2007, 19:13
ёбань какая-та