我想了解以下内容:
如果我声明64字节作为数组长度(缓冲区).当我转换为基数为64的字符串时,它表示长度为88.长度不应该只有64,因为我传递的是64字节?我完全可能误解了这个实际的工作方式.如果是的话,请你解释一下.
//Generate a cryptographic random number
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
// Create byte array
byte[] buffer = new byte[64];
// Get random bytes
rng.GetBytes(buffer);
// This line gives me 88 as a result.
// Shouldn't it give me 64 as declared above?
throw new Exception(Convert.ToBase64String(buffer).Length.ToString());
// Return a Base64 string representation of the random number
return Convert.ToBase64String(buffer);
Run Code Online (Sandbox Code Playgroud) 这是java代码:
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
random.setSeed(someBytes);//someBytes is the seed
Run Code Online (Sandbox Code Playgroud)
C#中有相同的方法吗?我得到的是不正确的:
RandomNumberGenerator rng = RNGCryptoServiceProvider.Create();
rng.GetBytes(someBytes);// out someBytes
Run Code Online (Sandbox Code Playgroud)
我确实需要种子,因为java代码确实如此,我必须将java代码翻译成C#.当我传递相同的种子时,我从C#获得的序列必须与java相同.
谁能告诉我这个Java代码到底做了什么?
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
byte[] bytes = new byte[20];
synchronized (random)
{
random.nextBytes(bytes);
}
return Base64.encode(bytes);
Run Code Online (Sandbox Code Playgroud)
一步一步的解释将是有用的,以便我可以在VB中重新创建此代码.谢谢
(我做了一次搜索,并没有看到重复.如果有的话我会提前道歉.)
我需要重复调用执行某些模拟的方法.此方法接受一些静态变量作为参数,并返回从随机数(double)(0.01 - 100.00)派生的计算结果.
但是,假设Random类构造函数将其种子基于当前系统时间,如果我连续25次调用该方法,那么我可以得到75.01,结果全部为25次.
是否有一种相对简单的方法可以在每次方法调用时获得几乎保证不同的数字?
我怀疑这有点容易实现,我只是不知所措.
谢谢!