如何在授权类文件中随机生成数字或字符

时间:2018-07-17 13:24:14

标签: c# .net random

我需要帮助来创建一个类文件,该文件随机生成10个字符(0-9,A-Z)。通过生成PIN,它将创建授权工作流,以允许用户对应用进行身份验证。该数字将定向到配置文件而不是URL。用户经过身份验证过程,而不是回叫URL,将有一个页面仅用于生成图钉。随机生成的PIN和访问代码将存储在数据库表中。

到目前为止,这是我所拥有的,如果不需要,该代码是否可以工作,以使其变得更好。我也知道RNGCryptoServiceProvider类对于强大的随机数生成器很有用,但是我不确定如何将其合并到我的代码中。

我也正在使用get set作为数据库字段。这将是REST API的最佳方法吗?我对API不太熟悉。希望对我的代码有帮助。

using System;

namespace AuthorizationPIN
{
using System;
using System.Text;


class RandomNumberSample
{
    static void Main(string[] args)
    {
        RandomGenerator generator = new RandomGenerator();
                    string str = generator.RandomString(10, false);
        Console.WriteLine($"Random string of 10 chars is {str}");



        Console.ReadKey();
    }
}
public class AuthorizationPIN
{
    public int Id { get; set; }
    public string AccessCode { get; set; }
    public string PIN { get; set; }

}
public class RandomGenerator
{
    // Generate a random number between two numbers  
    public int RandomNumber(int min, int max)
    {
        Random random = new Random();
        return random.Next(min, max);
    }

    // Generate a random string with a given size  
    public string RandomString(int size, bool upperCase)
    {
        StringBuilder builder = new StringBuilder();
        Random random = new Random();
        char ch;
        for (int i = 0; i < size; i++)
        {
            ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26   *                random.NextDouble() + 65)));
              builder.Append(ch);
        }
        if (upperCase)
            return builder.ToString().ToUpper();
        return builder.ToString();
    }

    // Generate a random password  

}

1 个答案:

答案 0 :(得分:0)

可以通过多种方法来完成您要问的问题,其中一种方法可以使分布良好:

public string RandomString(int size, bool upperCase)
{
    using (var r = new RNGCryptoServiceProvider())
    {
        StringBuilder builder = new StringBuilder();
        var data = new byte[size];
        r.GetNonZeroBytes(data);

        var b = @"0123456789abcdifghijklmnopqrstuvwxwzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdifghijklmnopqrstuvwxwzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdifghijklmnopqrstuvwxwzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdifghijklmnopqrstuvwxwzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456";

        for (int i = 0; i < data.Length; i++)
        {
            var c = b[data[i]];
            builder.Append((upperCase) ? char.ToUpperInvariant(c) : c);
        }
        return builder.ToString();
    }
}