我正在尝试创建一个随机字符串,该字符串将充当重置密码的令牌。生成后,我会将“密钥”存储在我的数据库中,并通过电子邮件向用户发送一个链接以重置其密码(例如 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。您可以在此处找到更多相关信息。
编辑:
从 .NET9 开始,现在还有
Base64Url
类。
您可以使用Html编码和解码方法 参考这个链接 https://learn.microsoft.com/en-us/dotnet/api/system.web.httputility.htmlencode