如何防止在c#中生成标记时使用特殊字符

本文关键字:特殊字符 何防止 | 更新日期: 2023-09-27 18:07:17

我生成一个令牌,以字节为单位转换日期时间。下面是我如何生成令牌的:

public string generateToken()
    {
        byte[] time = BitConverter.GetBytes(DateTime.UtcNow.ToBinary());
        byte[] key = new Guid().ToByteArray();
        string token = Convert.ToBase64String(time.Concat(key).ToArray());
        return token;
    }

生成令牌时的样子如下:

chas42Sbo9AAAAAAAAAAAAAAAAAAAAA

,但在某些日子它也会生成特殊字符。就像下面这个例子:

chs2BiT/z0gAAAAAAAAAAAAAAAAAAAAA

i解析结果在一个链接重定向到另一个页面

http://test.com/abo.aspx?chas42Sbo9AAAAAAAAAAAAAAAAAAAAA

加上特殊字符它看起来像这样:

http://test.com/abo.aspx?chs2BiT/z0gAAAAAAAAAAAAAAAAAAAAA

,这不起作用

是否有可能生成一个令牌,但没有特殊字符?

如何防止在c#中生成标记时使用特殊字符

Base64是这样定义的:

从0开始升序的64位数字为大写字母"A"到"Z",小写字母"A"到"Z"数字"0"到"9",符号"+"answers"/"。的价值字符"="用于尾部填充。

所以你不能使用Convert.ToBase64String,如果你不希望/字符出现在你的令牌