随机数大揭秘

参考文章:杨中科老师的《随机数是骗人的,.Net、Java、C为我作证》

http://www.cnblogs.com/rupeng/p/3723018.html#!comments

1.随机数的原理:

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

2.写一个自己的random

 1  static void Main(string[] args)
 2         {
 3             MyRandom mr = new MyRandom(8);//相同的种子,每次都会生成相同的随机数列,为了保证生成的随机数不同,就要每次都要有不同的种子,Envoironment.TickCount
 4             for (int i = 0; i < 10; i++)
 5             {
 6                 Console.WriteLine(mr.Next()); ;
 7             }
 8             Console.ReadKey();
 9         }
10     }
11     class MyRandom
12     {
13         private int seed;//字段seed
14         public MyRandom(int seed)//构造函数
15         {
16             this.seed = seed;
17         }
18         public int Next()
19         {
20             int next = (seed * 29 + 37) % 1000;
21             seed = next;
22             return next;
23         }
24     }

3..net内部的Random()用反编译工具可以看到种子为Environment.TickCount,这样就保证每次生成的随机数是基本上不同的。

4.然而Random ran=new Random()必须放在for循环的外面,

原因是for循环的运行速度很快,所以运行时Enviroment.ClickCount还是上次的值,所以产生的是相同的随机数

5.然而网站如果用随机数生成验证码,遇到高并发情况时,一微秒内会有多个人同时访问,就会造成几个人请求的验证码是相同的,系统就存在潜在的漏洞。那么这样的问题要如何解决呢?

1)将Random对象做一个全局实例来使用,Java中的Random是线程安全的(内部加锁),而.net的Random是线程不安全的,需要加锁,加锁会降低效率,而且由于初始的种子是确定的,所以攻击者存在着根据得到的若干随机数序列推测出"随机数种子"的可能性。

2)用Guid值获取HashCode或者MD5值作为种子。但是Guid也是根据某种算法算出来的,虽然随机的可能性增大,但是并不是真正的随机数

3)真随机数发生器

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

时间: 2024-10-01 05:15:23

随机数大揭秘的相关文章

我的新课--HTTPS全景大揭秘正在筹划中

在谷歌和苹果等公司的强力推动下,HTTPS的时代已经来临.为顺应时代趋势并响应学员的需求,广州八神 继<软件性能测试>.<快速上手Jmeter性能测试工具>后录制第3套课程<HTTPS全景大揭秘>.课程的目的只有一个,让学员一次性了解关于HTTPS的方方面面. 本套课程先从密码学的基础知识讲起,再带领大家回顾计算机网络从第一层到第七层需要掌握的知识.具备以上知识铺垫后,进入TLS和HTTPS的世界.同时针对HTTPS的应用.openssl命令.证书的生成和校验过程.性能

【高德地图API】从零开始学高德JS API(七)——定位方式大揭秘

摘要:关于定位,分为GPS定位和网络定位2种.GPS定位,精度较高,可达到10米,但室内不可用,且超级费电.网络定位,分为wifi定位和基站定位,都是通过获取wifi或者基站信息,然后查询对应的wifi或者基站位置数据库,得到的定位地点.定位数据库可以不断完善不断补充,所以,越定位越准确.本文详细描述了,如果使用高德JS API来实现位置定位.城市定位的方法,包含了IP定位,浏览器定位,检索定位等多种网络定位方法.当然,如果您的手机有GPS功能,那么使用浏览器定位的时候,会自动获取GPS信息,使

【转载】2014 IT公司校招应届生待遇大揭秘

2014 IT公司校招应届生待遇大揭秘 公司名称        职位类别        待遇(校招年份) 百度                  开发类                13K*14.6 + 800饭补(400+20*20) (2014) (注:今年百度相对比较多的人拿了special)                  测试类.前端类      12K*14.6 + 800饭补(400+20*20)  (2014)                  产品本硕           

字符编码乱码问题(servlet底层 编码大揭秘)

好多初学者会遇到,请求过去的信息内包含中文(一般会是get方式提交过去的请求会出现).好郁闷,这是为什么呢.有下面分析下,说的不好可以吐槽 话说我们能遇到这种编码的问题,归根结底就是这  这 web开发不是中国人开发的,中国文化博大精深,四大发明渊源流传,可惜,我们太自己为是了,来了个闭关锁国政策,弄得中国跟不上时代的步伐,不潮了,落伍了,互联网时代被西方人抢了个先,发明了,我们只能用别人的了.我们也知道,西方讲的是英语,所以他们采用的编码格式是iso-8895-1.而这  这种编码方式只占两个

String的split()方法探索和大揭秘

其实没打算写这么一篇博文的,但是昨天在逛论坛的时候,发现一帖子,然后我又把帖子的内容在群里发了一通,结果出现了让人惊讶的结果,所以这里简单的给大家分享一下split()方法,免得大伙儿以后还会出现这种基本知识错误! 接着说一下,昨天看到的帖子内容: String[] str1 = ";;;".split(";"); String[] str2 = ";a;;".split(";"); String[] str3 = "

网络抽奖大揭秘!!

初识数组 一  网络骗术抽奖大揭秘 下面的程序为要从 刘德华","周润发","周星驰","周杰伦","周杰","那英","刘欢 抽取一人获得某项奖品,正常的抽奖方式应为程序一方式:不正当 抽奖程序(一)公正的程序设置: static void Main(string[] args) {                //抽奖程序 string[] xingming=new string[

打造人气博客大揭秘(下)

引导语:前段花了2整天时间写了一篇<打造人气博客大揭秘(上)>,在A5.Chinaz.推一把等地方发布,甚受欢迎,很荣幸被A5推荐到正头条,在这里感谢A5,看过该篇文章的同学都知道是关于博客优化以及增强博客互动等基础建设方面内容,所以自己感觉还得写一篇运营推广篇.最近走亲戚.朋友聚会忙得不也乐乎,今天是年初六有点空闲,没事得动动笔了. 一个人气博客能取得成功它的因素是综合的,但"内容为王",有优质的内容,就"酒香不怕巷子深",但现在博客就如中国大学生,满

餐饮业的装修价格大揭秘

快餐店装修要花多少钱?开快餐店成为众多创业者的首选项目,但现在想开家好点的快餐店,出来需要加盟某知名品牌外,快餐店的装修费也是必不可的开支.那么,快餐店装修多少钱呢?快餐店装修费跟面积.选材.设计.施工等都是分不开的.自然在装修中,花钱的多少除也跟这些方面相关.今天小编就在这里为大家提供几点经验,谨防受骗! 一些消费者找到许诺免收设计费的家装公司,但先要缴付几千元的装修定金.当消费者不满意设计打算另换一家装修公司时,家装公司当即翻脸,要从装修定金中扣下几百元设计费.某装修公司的负责人称,设计是装

C语言第十回合:函数大揭秘

C语言第十回合:函数大揭秘 [学习目标] 1.       函数的定义 2.       函数的使用 3.       函数的声明 4.       形参和实参 5.       return语句 6.       函数的调用 函数:函数是包含一条或多条C语言的语句,完成程序中的部分功能的子程序.C源程序是由函数组成的. A: 函数的分类 (一)  从函数的定义角度看: (a)      库函数:由C系统提供,无需定义,如:printf,scanf,putchar- (b)      用户定义函