正如标题所说:非安全随机数发生器和安全随机数发生器之间有什么区别?
是否有替代System.Web.Security.Membership.GeneratePasswordin AspNetCore(netcoreapp1.0).
最简单的方法是使用一个Guid.NewGuid().ToString("n")足够长的密码,但它不是完全随机的.
asp.net asp.net-mvc asp.net-core asp.net-core-1.0 .net-standard-1.5
我知道有很多次这个问题已经提出,但这些解决方案都不适合我.
首先,我在我的方法中做了这个 RandomNumGenerator(items)
List<int> randNum = new List<int>();
foreach (var item in items)
{
randNum.Add(new Random(1000).Next());
}
Run Code Online (Sandbox Code Playgroud)
这总是给了我相同的数字,然后在看了这个答案之后我做了这个:
Random rnd = new Random(1000);
foreach (var item in items)
{
randNum.Add(rnd.Next());
}
Run Code Online (Sandbox Code Playgroud)
这给了我以下数字
325467165
506683626
1623525913
2344573
1485571032
Run Code Online (Sandbox Code Playgroud)
现在虽然循环的每次迭代都没问题,但问题是,当我停止并重新运行应用程序时,我得到了我之前重新获得的相同数字.
325467165
506683626
1623525913
2344573
1485571032
Run Code Online (Sandbox Code Playgroud)
这种行为只是在调试期间,还是每次调用时都会出现同样的问题RandomNumGenerator?
是否有任何有效的理由可以解释为什么没有String.Split接受分隔符字符串和要分割的文本的重载?
string[] Split(string delimiter)
Run Code Online (Sandbox Code Playgroud)
然后可以使用像
string input = "This - is - an - example";
string[] splitted = input.Split(" - ");
// results in:
// { "This", "is", "an", "example" }
Run Code Online (Sandbox Code Playgroud)
我真的知道,我可以轻松地创建一个扩展方法,但必须有正当理由说明为什么没有添加它.
请注意,我不是在寻找如何使用字符串分隔符拆分字符串的解决方案,我正在寻找解释,为什么这样的重载可能会导致问题.这是因为我认为它不会真正引起问题,我发现初学者很难理解为什么我们必须传递一个实际string[]而不是简单string的分隔符.
为什么Random类不被视为“随机”足以用于高安全性应用程序(例如密码学),并且建议用于System.RandomNumberGenerator这些应用程序?
由于RNGCryptoServiceProvider比Random()更"安全"(产生高质量的随机数),我觉得使用它.性能不是问题.但是,而不是读取最后一位数字,并以某种方式决定何时在它之前添加0或1 ..是否有更好(更准确)的方式?
byte[] data = new byte[4];
rng.GetBytes(data);
int value = BitConverter.ToInt32(data, 0);
Console.WriteLine(value);
Run Code Online (Sandbox Code Playgroud) 我已经通过以下编码来生成1000-9999范围内的范围:
Dim byt As Byte() = New Byte(1000) {}
Dim rngCrypto As New RNGCryptoServiceProvider()
rngCrypto.GetBytes(byt)
Dim randomNumber As Integer = BitConverter.ToInt32(byt, 9999)
Label4.Text = randomNumber
Run Code Online (Sandbox Code Playgroud)
它显示错误:
指数超出范围.必须是非负数且小于集合的大小.参数名称:
startIndex
我做了以下代码.这是对的吗?
Public Sub secrand()
Static r As Random = Nothing
If r Is Nothing Then
Dim seed() As Byte = New Byte(4) {}
Dim rng As New RNGCryptoServiceProvider
rng.GetBytes(seed)
r = New Random(BitConverter.ToInt32(seed, 0))
Label4.Text = r.Next(1000, 9999)
End If
End Sub
Run Code Online (Sandbox Code Playgroud) random ×7
c# ×6
.net ×4
cryptography ×2
numbers ×2
asp.net ×1
asp.net-core ×1
asp.net-mvc ×1
code-design ×1
split ×1
string ×1
vb.net ×1