This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Security.Cryptography;
|
||||
using Microsoft.AspNetCore.Cryptography.KeyDerivation;
|
||||
namespace AyaNova.Util
|
||||
@@ -32,6 +34,39 @@ namespace AyaNova.Util
|
||||
return Convert.ToBase64String(salt);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static string GetRandomAlphanumericString(int length)
|
||||
{
|
||||
const string alphanumericCharacters = "0123456789abcdefghijkmnopqrstuvwxyz";
|
||||
return GetRandomString(length, alphanumericCharacters);
|
||||
}
|
||||
|
||||
public static string GetRandomString(int length, IEnumerable<char> characterSet)
|
||||
{
|
||||
if (length < 0)
|
||||
throw new ArgumentException("length must not be negative", "length");
|
||||
if (length > int.MaxValue / 8) // 250 million chars ought to be enough for anybody
|
||||
throw new ArgumentException("length is too big", "length");
|
||||
if (characterSet == null)
|
||||
throw new ArgumentNullException("characterSet");
|
||||
var characterArray = characterSet.Distinct().ToArray();
|
||||
if (characterArray.Length == 0)
|
||||
throw new ArgumentException("characterSet must not be empty", "characterSet");
|
||||
|
||||
var bytes = new byte[length * 8];
|
||||
new RNGCryptoServiceProvider().GetBytes(bytes);
|
||||
var result = new char[length];
|
||||
for (int i = 0; i < length; i++)
|
||||
{
|
||||
ulong value = BitConverter.ToUInt64(bytes, i * 8);
|
||||
result[i] = characterArray[value % (uint)characterArray.Length];
|
||||
}
|
||||
return new string(result);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}//eoc
|
||||
|
||||
}//eons
|
||||
Reference in New Issue
Block a user