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

问题描述 投票:0回答:2

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

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

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

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

有没有办法生成没有上述字符的密钥?我知道我可以使用 randKey.Replace() 但我必须对所有不同的字符执行此操作,而且我不太确定这是否是最好的方法。

c# asp.net-core model-view-controller razor cryptography
2个回答
2
投票

您可以使用

Microsoft.IdentityModel.Tokens.Base64UrlEncoder
。它基本上以 url 友好的格式编码为 base64。您可以在此处找到更多相关信息。

编辑:

从 .NET9 开始,现在还有

Base64Url
类。


0
投票

您可以使用Html编码和解码方法 参考这个链接 https://learn.microsoft.com/en-us/dotnet/api/system.web.httputility.htmlencode

© www.soinside.com 2019 - 2024. All rights reserved.