我是靠谱客的博主 无语茉莉,最近开发中收集的这篇文章主要介绍用C#得到真正的随机数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 

关于生成随机数,有以下几个可以选择的方案:

1) System.Random

2) xdev所提到的System.Security.Cryptography.RNGCryptoServiceProvider

3) 直接调用Platform SDK中的CryptGenRandom()函数。

其中,和1)相比,2)和3)可以被作为真正的随机数来使用。

System.Random是最简单最常用的随机数发生器,如果用系统当前时间做种子,基本上可以做到"伪"随机。但是用System.Random得到的随机数的安全性是不高的,用户完全可以用一些方法根据已经生成的随机数序列预测出下一个随机数的值。在一些用到加密的场合,随机数序列可被预测会导致很严重的漏洞,例如曾经有扑克牌游戏网站由于使用了可以被预测的随机数发生器来实现随机发牌而导致的安全漏洞(参见http://www.cigital.com/news/gambling.html)。

如果需要更"随机"的随机数,应该使用System.Security.Cryptography.RNGCryptoServiceProvider或者Platform SDK中的CryptGenRandom()函数。System.Security.Cryptography.RNGCryptoServiceProvider是对System.Security.Cryptography.RandomNumberGenerator接口的一个实现,提供了获得可用于加密的随机数序列(cryptographically strong random values)的方法。

Platform SDK中的CryptGenRandom()函数也是一个非常好的随机数发生器,他在生成随机数的时候不单单用到了系统时间,还用到了Process ID、Thread ID以及大量系统信息。当然,CryptGenRandom()和RNGCryptoServiceProvider在提供更好的随机数的同时,不可避免的是速度方面的性能要逊于System.Random。

Hogwarts - S(u)ddenly dis@ppeared...

-

本贴子以"现状"提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。

为了为您创建更好的讨论环境,请参加我们的用户满意度调查(http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。

我用的是系统的默认种子值,每次取出10个,好像没有你说得问题啊,我每次重新运行程序时得到的都不一样啊。程序如下:

    Random rr=new Random();

    for(int i=0;i<10;i++)

       Console.WriteLine(rr.Next().ToString()+"n");

其实以默认的种子值也是以时间作为种子的

 


|字号 订阅

转载于:https://www.cnblogs.com/zhangxiaosong/archive/2012/07/06/2580156.html

最后

以上就是无语茉莉为你收集整理的用C#得到真正的随机数的全部内容,希望文章能够帮你解决用C#得到真正的随机数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部