gpt4 book ai didi

c# - 为什么 RNGCryptoServiceProvider 值总是以等号结尾?

转载 作者:太空狗 更新时间:2023-10-30 00:20:47 29 4
gpt4 key购买 nike

这是我的方法:

public static string GenerateRandomString(int bytes)
{
var rng = new RNGCryptoServiceProvider();
var randomBytes = new byte[bytes];
rng.GetBytes(randomBytes);
return Convert.ToBase64String(randomBytes);
}

生成的每个值:

即:

Qcr6OgNxkGzVebNl00Dtk7yCaz64owUx7pKEhl1Ogn4=
IGFLQB0OrReDB3P6nuZgqZIkTwTtch9Fk3Rx/DL4CgI=
UAJwLwIPYEJ9SzMAK/EMiUJ/DHhmfy6UVMM5MU6Dcpg=

总是以“=”结尾——这是为什么?

我将其作为密码重置电子邮件的随机字符串发送,但 Microsoft Outlook 出现问题,无法在链接末尾提取 =。有没有人知道解决这个问题的方法而不是简单地切断字符串的最后一个字符?

最佳答案

它与返回的字节数有关。 = 用作 base64 的填充。

编辑

使用您的算法,我使用 1 到 20 个字节生成字符串,每行打印 1 个结果。如您所见,有些字符串以等号结尾,有些则没有。

Ng==
HAo=
g+h1
pdR+cQ==
z5bFWwc=
BilTQWCU
kXo96Jilxw==
7jc16UHgbGc=
DnLzoSDUNVfQ
6MwGWLD3ZcbfZA==
hADhg4HFdMVi1n0=
cWm2HEKs48VaoYgl
TrwxX20FmEs7o8u2ag==
WLORuUzewYDB18XFAcc=
tSnvFVVm/NZ2tkXJnB6V
McUWf0mAmM5/0Upu+eYd+w==
Eln3QPMr2VjXt4e3GsZuOXo=
DBYLTG3fDbMC5I1bnYmG/NxH
KgGhxdZjmjUypsqnbQUMCJzVrQ==
yI+3sFdzBX4Xfb2u6xuzQdS9II0=

编辑#2

我意识到我解释了 = 出现的原因,但从未建议过另一种生成 URL 参数的方法。一种这样的方式是 System.Web.HttpServerUtility.UrlTokenEncode()将字节数组转换为 url 友好格式的方法。要将字符串转换回字节数组,请使用 System.Web.HttpServerUtility.UrlTokenDecode()方法。

关于c# - 为什么 RNGCryptoServiceProvider 值总是以等号结尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9132215/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com