【发布时间】:2020-04-13 11:08:47
【问题描述】:
我有在 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
这是不正确的,我不知道如何解决它
谢谢!
【问题讨论】:
-
向我们展示您的 php 代码以及您遇到的问题。
-
@Vidal 我已经添加了代码:)
-
这一行$time = ticks_to_time($new[1]);时间变量的内容是什么?
-
@Vidal $new[1] is
3544386994072269088- 授权密钥也如下所示:21VMky3f10ik7t5IeGKCSrA+MO10rN2N