我需要帮助来创建一个类文件,该文件随机生成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
}
答案 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();
}
}