繁体   English   中英

RNGCryptoServiceProvider 已过时

[英]RNGCryptoServiceProvider is obsolete

我需要使用随机数字和字母生成令牌。 但是,错误消息告诉我使用 RandomNumberGenerator 只会给我随机数,这无济于事。

错误信息

'RNGCryptoServiceProvider' 已过时:'RNGCryptoServiceProvider 已过时。 要生成随机数,请改用其中一种 RandomNumberGenerator 静态方法。

当前使用的代码

    private static string RandomString()
    {
        int length = 256;
        const string valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
        StringBuilder res = new StringBuilder();
        using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
        {
            byte[] uintBuffer = new byte[sizeof(uint)];

            while (length-- > 0)
            {
                rng.GetBytes(uintBuffer);
                uint num = BitConverter.ToUInt32(uintBuffer, 0);
                res.Append(valid[(int)(num % (uint)valid.Length)]);
            }
        }
        return res.ToString();
    }

如何更改上面的代码以使用未过期的包?

您可以像这样使用RandomNumberGenerator

var randomNumber = new byte[32];
string refreshToken = "";

using (var rng = RandomNumberGenerator.Create())
{
     rng.GetBytes(randomNumber);
     refreshToken = Convert.ToBase64String(randomNumber);
}

结果示例: fHu4SOyv03PhHvqWx5WGmI5xQFnH00CmLCV3IYJd5Dw=

只需根据您的情况进行调整。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM