创建可以在链接中用作查询的随机字符串

问题描述

我正在尝试创建一个随机字符串,该字符串将用作重置密码的令牌。生成后,我会将“密钥”存储在数据库中,并通过电子邮件用户发送链接以重置其密码(例如page.com/?key=xxxxxxxxxxxxxxx)

我一直在尝试使用以下代码

RandomNumberGenerator rng = RandomNumberGenerator.Create();
byte[] randomBytes = new byte[30];
rng.GetBytes(randomBytes);
string randKey = Convert.ToBase64String(randomBytes);

这似乎可以很好地安静地创建随机字符串,但是问题在于它有时会使用保留字符(/,+等),这些字符在尝试读取查询字符串时会破坏我的密钥。

有没有什么方法可以生成没有以上字符的密钥?我知道我可以使用randKey.Replace(),但是我必须对所有不同的字符都这样做,但我不确定这是否是最好的方法

解决方法

您可以使用Microsoft.IdentityModel.Tokens.Base64UrlEncoder。它基本上以url友好格式编码为base64。您可以找到有关here的更多信息。

,

您可以使用HTML编码和解码方法 引用此链接 https://docs.microsoft.com/en-us/dotnet/api/system.web.httputility.htmlencode