【问题标题】:How to convert C# code to create an auth key into PHP如何将 C# 代码以创建身份验证密钥转换为 PHP
【发布时间】: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

标签: c# php datetime int64


【解决方案1】:

Int64 值可以直接在 base64_decode 之后用 unpack 确定。 int64 是一个 64 位有符号整数,它将 Kind 属性编码为 2 位字段,将 Ticks 属性编码为 62 位字段。 必须使用掩码过滤掉蜱虫。然后将刻度转换为 linux 时间戳。

$token = "21VMky3f10ik7t5IeGKCSrA+MO10rN2N";

$decoded = base64_decode($token);

$decArr = unpack("q",$decoded);
$int64 = $decArr[1]; //5248909277561378267 = 2 bit kind and 62 bit ticks

$ticks = ($int64 & 0x3fffffffffffffff);

$linuxTs = $ticks/10000000 - 62135596800;

echo gmdate("Y-m-d H:i:s",$linuxTs);
//2020-04-12 22:05:13

【讨论】:

    猜你喜欢
    • 2020-11-06
    • 2016-03-22
    • 2022-01-13
    • 2019-07-24
    • 2019-09-16
    • 2019-04-14
    • 2018-11-02
    • 1970-01-01
    • 2019-03-14
    相关资源
    最近更新 更多