zoukankan      html  css  js  c++  java
  • 如鹏网.Net基础1 随机数“骗局”揭秘

    第 1 节 随机数有什么用、怎么用?

      .Net中创建随机数的方法:

    1
    2
    Random rand = new Random();
    Console.WriteLine(rand.Next());

      Java中创建随机数的方法:

    1
    2
    3
    Random rand = new Random(System.currentTimeMillis());
    int i = rand.nextInt();
    System.out.println(i);

      C/C++中创建随机数的方法:

    1
    2
    3
    srand((unsigned)time(NULL)); 
    int num = rand();
    printf("%d ",num);

     

    ------------------------------------------------
    第 2 节 为什么每次生成的随机数都一样(跪求种子)

      在For循环中生成多个随机数的时候要把new Random()放到循环外面。

      随机数的原理:

      线性同余法:第n+1个数=(第n个数*29+37) % 1000

      编写一个自己的随机数类:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class MyRand {
        private int seed;
        public MyRand(int seed) {this.seed = seed;} 
      public int Next()
       {
         int next = (seed * 29 + 37) % 1000;
         seed = next;
         return next;
      
    }

    ------------------------------------------------
    第 3 节 如何生成真随机数  

      在Linux/Unix下可以使用"/dev/random"这个真随机数发生器,它的数据主来来自于硬件中断信息。

      Windows:CryptGenRandom()函数,主要依据当前进程Id、当前线程Id、系统启动后的TickCount、当前时间、QueryPerformanceCounter返回的高性能计数器值、用户名、计算机名、CPU计数器的值等等来计算。

      当然.Net下也可以使用RNGCryptoServiceProvider 类(System.Security.Cryptography命名空间下)来生成真随机数。

        参考文章:《随机数是骗人的,.Net、Java、C为我作证》http://www.cnblogs.com/rupeng/p/3723018.html 

       知其然知其所以然!

    如鹏网:http://www.rupeng.com

  • 相关阅读:
    centos6.5的开机自动部署出现unsupported hardware detected
    Nginx的安装
    sshpass的使用方法
    dhcp 的安装和配置文件
    SMBus总线概述
    SMBus与I2C的差别
    vim搭建笔记
    pcie dma的玩法
    Virtex6 PCIe 超简版基础概念学习(二)
    揭开Altera公司支持OpenCL的设计工具的神秘面纱
  • 原文地址:https://www.cnblogs.com/wjs5943283/p/5239199.html
Copyright © 2011-2022 走看看