@moved_on

Внимание знатокам — md5 строки — разные значения — почему?

Всем привет. Проблема в следующем.

Язык - php.
Посылаю POST-запрос на сервер. Параметры запроса следующие - appdata - {"id":1,"hash":"a08f4db74b7ca13f52b098a3bdc65dd9"} , params - {"asd":123} (сформированный json).

в скрипте обрабатываю следующим образом:
if (isset($_POST['appdata'])) //appdata - id,hash of app
			{
				unset($appdata);
				$appdata = json_decode($_POST['appdata'], true);
				if (empty($appdata))
				{
					throw new Exception('$appdata in POST is bad - '.$_POST['appdata'].' from ip - '.$_SERVER["REMOTE_ADDR"], -15);
				}

				unset($soul);
				$soul = _CheckAPP($appdata['id'],$appdata['hash'],$_POST['params']);


где _CheckAPP -

function _CheckAPP($id,$hash,$params)
{
	if (empty($id) || empty($hash) || empty($params))
	{
		throw new Exception('$appdata in POST is bad - '.$_POST['appdata'].' from ip - '.$_SERVER["REMOTE_ADDR"], -15);
	}
	$APP_list=array(
					1 => array(
					'id' => '1',
					'secret' => '882fa0dd30eeca544871f31bc41d244b',
					'soul' => 'asd12wez128&712u4h8-0)611297cg*&'
					)
				);

	if (!isset($APP_list[$id]))
	{
		throw new Exception('This APP Not Registered - '.$id, -11);
	}
	else
	{
		$reg_secret=$APP_list[$id]['secret'];
		$conc_string=$id.$params.$reg_secret;
		if (md5($conc_string)!==$hash)
		{
			throw new Exception('APP Registered - '.$id.' hash is wrong - '.md5($conc_string), -12);
		}
		else
		{
			return $APP_list[$id]['soul'];
		}
	}
}


выбрасывает ошибку - хэш не подходит. Получаю хэш от $conc_string в другом скрипте или на сайте-генераторе - не совпадает с тем, что указан в тексте ошибки.

В чем может быть проблема?

Спасибо.
  • Вопрос задан
  • 3023 просмотра
Пригласить эксперта
Ответы на вопрос 2
kumaxim
@kumaxim
Web-программист
Проблема, вероятнее всего, в кодировках. Для начала сверь кодировки файлов, которые обрабатывают твой код, не критично utf-8 win-1251, главное чтобы было что-то одно.
Далее, проверь задана ли у тебя кодировка страницы в мета-теге. Опять же одна должна быть одинаковой с кодировкой твоих файлов.
Если и это верно, но все равно есть ошибка - конвертируй строку принудительно через iconv
Ответ написан
Комментировать
@moved_on Автор вопроса
function _CheckAPP($id,$hash,$params)
{
	if (empty($id) || empty($hash) || empty($params))
	{
		throw new Exception('$appdata in POST is bad - '.$_POST['appdata'].' from ip - '.$_SERVER["REMOTE_ADDR"], -15);
	}
	$APP_list=array(
					//APP_OFFICIAL_ANDROID
					1 => array(
					'id' => '1',
					'secret' => '882fa0dd30eeca544871f31bc41d244b',
					'soul' => 'asd12wez128&712u4h8-0)611297cg*&'
					)
				);

	if (!isset($APP_list[$id]))
	{
		throw new Exception('This APP Not Registered - '.$id, -11);
	}
	else
	{
		$reg_secret=$APP_list[$id]['secret'];
		$conc_string=$id.$params.$reg_secret;
		if (md5($conc_string)!==$hash)
		{
			echo md5('1{"asd":23}882fa0dd30eeca544871f31bc41d244b').' ';//тут все ок
			throw new Exception('APP Registered - '.$id.' hash is wrong - '.md5($conc_string).' '.$conc_string.' ', -12);
		}
		else
		{
			return $APP_list[$id]['soul'];
		}
	}
}

try
{
	_CheckAPP(1,"400c09327ea9bf1fe9d2223c5e32c7a6",'{"asd":23}');
}
catch (Exception $e)
{	
	echo $e->getMessage();
}


Итак, пробую сделать по-другому.
выношу все в отдельный скрипт. не помогает..(
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы