C#令牌解析

C#令牌解析,c#,.net,base64,C#,.net,Base64,我想将日期和用户电子邮件合并为一个base64字符串,它现在的工作方式如下: public string GenerateUniqueToken(string email) { byte[] time = BitConverter.GetBytes(DateTime.UtcNow.ToBinary()); byte[] key = Encoding.ASCII.GetBytes(email); string encoded = Convert.ToBase64String

我想将日期和用户电子邮件合并为一个
base64
字符串,它现在的工作方式如下:

public string GenerateUniqueToken(string email)
{
    byte[] time = BitConverter.GetBytes(DateTime.UtcNow.ToBinary());
    byte[] key = Encoding.ASCII.GetBytes(email);
    string encoded = Convert.ToBase64String(time.Concat(key).ToArray());
    return criptographyService.Encrypt(encoded);
}
我现在想解析它,这样我就只能从解码的字符串中获得一封电子邮件,但我正在将所有内容整合在一起:

public string TokenUserValid(string token)
{
    string decrypted = criptographyService.Decrypt(token);
    byte[] data = Convert.FromBase64String(decrypted);
    return Encoding.Default.GetString(data);
}
我得到的形式如下:

public string GenerateUniqueToken(string email)
{
    byte[] time = BitConverter.GetBytes(DateTime.UtcNow.ToBinary());
    byte[] key = Encoding.ASCII.GetBytes(email);
    string encoded = Convert.ToBase64String(time.Concat(key).ToArray());
    return criptographyService.Encrypt(encoded);
}

\�����嗯。email@gmail.com

在您的日期和电子邮件名称之间加上分隔符,如#。 然后使用string.Split()将它们断开并放在字符串数组中


电子邮件将位于数组的索引[1]上,而日期位于索引[0]上。

在日期和电子邮件名称之间添加分隔符,如#。 然后使用string.Split()将它们断开并放在字符串数组中


电子邮件将位于数组的索引[1]上,而日期位于索引[0]上。

由于您知道日期的长度,您可以从
字节[]中分别读取时间和电子邮件。

//combine time and email
byte[] time = BitConverter.GetBytes(DateTime.UtcNow.ToBinary());
byte[] key = Encoding.ASCII.GetBytes("scottrobinson@notmyemail.com);
string encoded = Convert.ToBase64String(time.Concat(key).ToArray());

//read time and email
byte[] data = Convert.FromBase64String(encoded);
DateTime date =  DateTime.FromBinary(BitConverter.ToInt64(data.Take(8).ToArray(), 0)); //read the date
string email  = Encoding.Default.GetString(data.Skip(8).ToArray()); //read the email

如您所知,您可以从
字节[]中分别读取时间和电子邮件。

//combine time and email
byte[] time = BitConverter.GetBytes(DateTime.UtcNow.ToBinary());
byte[] key = Encoding.ASCII.GetBytes("scottrobinson@notmyemail.com);
string encoded = Convert.ToBase64String(time.Concat(key).ToArray());

//read time and email
byte[] data = Convert.FromBase64String(encoded);
DateTime date =  DateTime.FromBinary(BitConverter.ToInt64(data.Take(8).ToArray(), 0)); //read the date
string email  = Encoding.Default.GetString(data.Skip(8).ToArray()); //read the email

您可以使用一个特殊符号如|连接它们并拆分解码字符串。您可以使用一个特殊符号如|连接它们并拆分解码字符串。您可能希望演示代码的含义,因为您可能会发现一些问题。。。由于日期和电子邮件是以字节而不是字符串的形式存储的,因此字符串作为分隔符将不起作用。同样,任意字节值也可能有问题,因为它可能出现在二进制日期值中,从而给您带来问题!您可能希望演示代码的含义,因为您可能会发现一些问题。。。由于日期和电子邮件是以字节而不是字符串的形式存储的,因此字符串作为分隔符将不起作用。同样,任意字节值也可能有问题,因为它可能出现在二进制日期值中,从而给您带来问题!