У меня есть код для генерации ключа авторизации в C#, который выглядит следующим образом:
public string generateToken()
{
byte[] time = BitConverter.GetBytes(DateTime.UtcNow.ToBinary());
byte[] key = Guid.NewGuid().ToByteArray();
string token = Convert.ToBase64String(time.Concat(key).ToArray());
return token;
}
Ключ аутентификации выглядит следующим образом: 21VMky3f10ik7t5IeGKCSrA+MO10rN2N
И код для его декодирования выглядит так:
public bool decodeToken(string token)
{
byte[] data = Convert.FromBase64String(token);
DateTime when = DateTime.FromBinary(BitConverter.ToInt64(data, 0));
if (when < DateTime.UtcNow.AddHours(-24))
{
//token is more than 24 hours old
return false;
} else
{
return true;
}
}
Как мне перевести функцию decodeToken
в функцию PHP, чтобы я мог проверить токен на сервере.
Мой текущий код PHP выглядит следующим образом:
$decoded = base64_decode($token);
$rawBytes = "";
foreach(str_split($decoded) as $byte)
{
$rawBytes .= ' ' . sprintf("%08b", ord($byte));
}
$new = unpack("q",$rawBytes);
$time = ticks_to_time($new[1]);
return date("F j Y g:i:s A T", $time);
$ new [1] = 3544386994072269088
, который затем превращается в дату и время:
September 18 11232 6:16:47 PM UTC
Это неверно, и я не знаю, как это исправить
Спасибо!