function check_hash($token){
$arr = $_GET;
$check_hash = $arr['hash'];
unset($arr['hash']);
foreach($arr as $k => $v) $check_arr[]=$k.'='.$v;
@sort($check_arr);
$string = @implode("\n", $check_arr);
$secret_key = hash('sha256', $token, true);
$hash = hash_hmac('sha256', $string, $secret_key);
if (strcmp($hash, $check_hash) !== 0) return false;
return true;
}
function check_hash($token){
$arr = $_GET;
$check_hash = $arr['hash'];
unset($arr['hash']);
$data_check_arr = explode('&', rawurldecode($check_hash));
$needle = 'hash=';
$check_hash = FALSE;
foreach( $data_check_arr AS &$val ){
if( substr( $val, 0, strlen($needle) ) === $needle ){
$check_hash = substr_replace( $val, '', 0, strlen($needle) );
$val = NULL;
}
}
$data_check_arr = array_filter($data_check_arr);
sort($data_check_arr);
$check_hash = implode("\n", $data_check_arr);
$secret_key = hash_hmac( 'sha256', $token, "WebAppData", TRUE );
$hash = bin2hex( hash_hmac( 'sha256', $check_hash, $secret_key, TRUE ) );
if(strcmp($hash, $check_hash) === 0){
return true;
}else{
return false;
}
}
function check_hash($params, $token): bool {
$hash = $params['hash'];
unset($params['hash']);
// Фильтрация пустых значений и сортировка массива по ключам
$params = array_filter($params);
ksort($params);
// Формирование строки для подписи
$string = implode("\n", array_map(
function ($key, $value) {
return $key . '=' . $value;
},
array_keys($params),
$params
));
// Получение секретного ключа
$secret_key = hash_hmac('sha256', $token, "WebAppData", true);
// Вычисление HMAC
$newHash = hash_hmac('sha256', $string, $secret_key);
// Сравнение полученного хэша с исходным
return hash_equals($newHash, $hash);
}