/// <summary> /// Get a secure random string using RNGCryptoServiceProvider /// </summary> /// <param name="length">length of random string</param> /// <returns>random string</returns> public string NextSecure(int length) { var chars = CharLimit.ToCharArray(); var data = new byte[1]; using (var crypto = new RNGCryptoServiceProvider()) { crypto.GetNonZeroBytes(data); data = new byte[length]; crypto.GetNonZeroBytes(data); } var result = new StringBuilder(length); foreach (var b in data) { result.Append(chars[b % (chars.Length)]); } return(result.ToString()); }