public string Generate()
{
string range = GetRangeFromCharacters(Characters);
byte[] random = CryptoBox.GetRandomBytes(Length);
StringBuilder sb = new StringBuilder();
for(int i = 0; i < random.Length; i++)
{
byte b = random[i];
b = (byte)(b * ((double)range.Length / 256d));
sb.Append(range[b]);
}
return sb.ToString();
}