如何防止在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
,这不起作用
是否有可能生成一个令牌,但没有特殊字符?
Base64
是这样定义的:
从0开始升序的64位数字为大写字母"A"到"Z",小写字母"A"到"Z"数字"0"到"9",符号"+"answers"/"。的价值字符"="用于尾部填充。
所以你不能使用Convert.ToBase64String
,如果你不希望/
字符出现在你的令牌