zoukankan      html  css  js  c++  java
  • 在.NET Framework环境下生成真随机数

    这里仅讨论.NET Framework环境下的情况,在.NET Core中有变化。

    真随机数是相对于伪随机数生成类 Random 的。

    电脑产生的随机数都是算法生成的,简单的Random类默认使用系统时间刻度作用种子生成随机数,因此如果在并发情况下两个实例产生的随机数有可能相同,也就是说有可能被预测(随机数序列可被预测会导致很严重的漏洞,例如曾经有扑克牌游戏网站由于使用了可以被预测的随机数发生器来实现随机发牌而导致的安全漏洞)。

    所以可以使用RNGCryptoServiceProvider的实现类RandomNumberGenerator来生成随机数,它不仅仅使用单一的系统时间元素来生成随机数,还包含了Process ID、Thread ID以及大量系统信息。

     1 public static int Next(this RandomNumberGenerator generator, int min, int max)
     2         {
     3             // match Next of Random
     4             // where max is exclusive
     5             max = max - 1;
     6 
     7             var bytes = new byte[sizeof(int)]; // 4 bytes
     8             generator.GetNonZeroBytes(bytes);
     9             var val = BitConverter.ToInt32(bytes, 0);
    10             // constrain our values to between our min and max
    11             // https://stackoverflow.com/a/3057867/86411
    12             var result = ((val - min) % (max - min + 1) + (max - min + 1)) % (max - min + 1) + min;
    13             return result;
    14         }
     
  • 相关阅读:
    今日SGU 5.27
    今日SGU 5.26
    今日SGU 5.25
    软件工程总结作业
    个人作业——软件产品案例分析
    个人技术博客(α)
    结对作业二
    软工实践 二
    软工实践 一
    《面向对象程序设计》六 GUI
  • 原文地址:https://www.cnblogs.com/WinHEC/p/RandomNumberGenerator.html
Copyright © 2011-2022 走看看