ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Для тех, кто практикуется..
  #1  
Старый 27.08.2009, 23:16
Аватар для uvartyom
uvartyom
Новичок
Регистрация: 27.08.2009
Сообщений: 2
Провел на форуме:
2242

Репутация: 0
По умолчанию Для тех, кто практикуется..

Вечер добрый.

В заранее попрошу без оскорблений и мата, я всего 2й месяц web-программирование изучаю.

Недавно столкнулся с проблемой, и для меня она показалась серьезной..

Перебивал под себя форум с открытым исходником, называется phpbb 3.0.5, там столкнулся с непонятным для меня хешированием md5(phpbb).

в mysql пароль выглядит так: $H$9N7lGJXtfWooQuiHNGoOEQE/kI5b.p/
соль: 88ca5851fa9f3ce3
логин: Zxcvbn
пароль: 123456

Если кто в состоянии помочь - в заранее огромное спасибо!

Нашел файл, отвечающий за хеширование, но не хватает опыта..

Нужно сделать свою Авторизацию и Регистрацию, а точнее создать файл, хеширующий пароли и сравнивающий хеш с введенным.


Вот код, с того файла, который я нашел:

Код:
function phpbb_hash($password)
{
	$itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';

	$random_state = unique_id();
	$random = '';
	$count = 6;

	if (($fh = @fopen('/dev/urandom', 'rb')))
	{
		$random = fread($fh, $count);
		fclose($fh);
	}

	if (strlen($random) < $count)
	{
		$random = '';

		for ($i = 0; $i < $count; $i += 16)
		{
			$random_state = md5(unique_id() . $random_state);
			$random .= pack('H*', md5($random_state));
		}
		$random = substr($random, 0, $count);
	}

	$hash = _hash_crypt_private($password, _hash_gensalt_private($random, $itoa64), $itoa64);

	if (strlen($hash) == 34)
	{
		return $hash;
	}

	return md5($password);
}

/**
* Check for correct password
*
* @param string $password The password in plain text
* @param string $hash The stored password hash
*
* @return bool Returns true if the password is correct, false if not.
*/
function phpbb_check_hash($password, $hash)
{
	$itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
	if (strlen($hash) == 34)
	{
		return (_hash_crypt_private($password, $hash, $itoa64) === $hash) ? true : false;
	}

	return (md5($password) === $hash) ? true : false;
}

/**
* Generate salt for hash generation
*/
function _hash_gensalt_private($input, &$itoa64, $iteration_count_log2 = 6)
{
	if ($iteration_count_log2 < 4 || $iteration_count_log2 > 31)
	{
		$iteration_count_log2 = 8;
	}

	$output = '$H$';
	$output .= $itoa64[min($iteration_count_log2 + ((PHP_VERSION >= 5) ? 5 : 3), 30)];
	$output .= _hash_encode64($input, 6, $itoa64);

	return $output;
}

/**
* Encode hash
*/
function _hash_encode64($input, $count, &$itoa64)
{
	$output = '';
	$i = 0;

	do
	{
		$value = ord($input[$i++]);
		$output .= $itoa64[$value & 0x3f];

		if ($i < $count)
		{
			$value |= ord($input[$i]) << 8;
		}

		$output .= $itoa64[($value >> 6) & 0x3f];

		if ($i++ >= $count)
		{
			break;
		}

		if ($i < $count)
		{
			$value |= ord($input[$i]) << 16;
		}

		$output .= $itoa64[($value >> 12) & 0x3f];

		if ($i++ >= $count)
		{
			break;
		}

		$output .= $itoa64[($value >> 18) & 0x3f];
	}
	while ($i < $count);

	return $output;
}

/**
* The crypt function/replacement
*/
function _hash_crypt_private($password, $setting, &$itoa64)
{
	$output = '*';

	// Check for correct hash
	if (substr($setting, 0, 3) != '$H$')
	{
		return $output;
	}

	$count_log2 = strpos($itoa64, $setting[3]);

	if ($count_log2 < 7 || $count_log2 > 30)
	{
		return $output;
	}

	$count = 1 << $count_log2;
	$salt = substr($setting, 4, 8);

	if (strlen($salt) != 8)
	{
		return $output;
	}

	/**
	* We're kind of forced to use MD5 here since it's the only
	* cryptographic primitive available in all versions of PHP
	* currently in use.  To implement our own low-level crypto
	* in PHP would result in much worse performance and
	* consequently in lower iteration counts and hashes that are
	* quicker to crack (by non-PHP code).
	*/
	if (PHP_VERSION >= 5)
	{
		$hash = md5($salt . $password, true);
		do
		{
			$hash = md5($hash . $password, true);
		}
		while (--$count);
	}
	else
	{
		$hash = pack('H*', md5($salt . $password));
		do
		{
			$hash = pack('H*', md5($hash . $password));
		}
		while (--$count);
	}

	$output = substr($setting, 0, 12);
	$output .= _hash_encode64($hash, 16, $itoa64);

	return $output;
}
 
Ответить с цитированием

  #2  
Старый 28.08.2009, 00:23
Аватар для ErrorNeo
ErrorNeo
Moderator - Level 7
Регистрация: 02.05.2009
Сообщений: 894
Провел на форуме:
4297091

Репутация: 2261


Отправить сообщение для ErrorNeo с помощью ICQ
По умолчанию

т.е. тебе надо, фактически, написать на php свой рабочий модуль авторизации\регистрации.

К хешкрекингу тема отношения не имеет, потому переношу в раздел вопросов по php
 
Ответить с цитированием

  #3  
Старый 28.08.2009, 13:44
Аватар для uvartyom
uvartyom
Новичок
Регистрация: 27.08.2009
Сообщений: 2
Провел на форуме:
2242

Репутация: 0
По умолчанию

Цитата:
Сообщение от FireFenix  
что мешает заюзать phpBB'шные функи?
PHP код:
//инклюдим файл функций хеширования

$hash phpbb_hash($_POST['pass']);

//сраванение в БД или где-нить там 
если хочешь готовое - иди в раздел "О работе"
т.е.:
include ("файл форума с хешем");
if ($hash = phpbb_hash($_POST['pass'])) {...}
else {...}

Если так, то выводит else.. или я что-то не допонял??
 
Ответить с цитированием

  #4  
Старый 28.08.2009, 13:48
Аватар для Rebz
Rebz
Super Moderator
Регистрация: 08.11.2004
Сообщений: 3,395
Провел на форуме:
13166814

Репутация: 3876


По умолчанию

Цитата:
include ("файл форума с хешем");
У тебя пароли хранятся в файлах? А не проще ли в БД?
 
Ответить с цитированием

  #5  
Старый 28.08.2009, 13:52
Аватар для Krist_ALL
Krist_ALL
Banned
Регистрация: 14.01.2009
Сообщений: 515
Провел на форуме:
1996429

Репутация: 468


Отправить сообщение для Krist_ALL с помощью ICQ
По умолчанию

$hash = phpbb_hash($_POST['pass']); //переменная hash содержит хеш, полученый от функции phpbb_hash

$hash2 = ... //достаем из базы хеш, который соответствует пользователю, который хочет залогнится
//ну или из файла,, как тебе нравится. Лучше в бд переведи учетки юзеров.
if($hash == $hash2) {echo ' OK'; }
else echo 'error';
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обзор легального бесплатного ПО Sinay Soft - Windows 48 24.04.2010 20:08
Хакер и закон! SladerNon Болталка 17 12.11.2009 09:42
[Статья] Создание расширения для Windows Explorer при помощи C++ Builder Dobby007 С/С++, C#, Delphi, .NET, Asm 2 29.03.2009 08:58



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ