金希澈车祸后留的疤:/dev/random和/dev/urandom区别 ? 死灰的博客

来源:百度文库 编辑:九乡新闻网 时间:2024/07/07 15:30:47

random和urandom这个两个设备都是linux提供随机数的。很多应用用到他们提供随机数(ssh keys, SSL keys, TCP/IP sequence numbers)
random设备的random pool是从基于中断的IRQS里面取值,IRQS跟一些特殊的硬件绑定,基于这些硬件的interrupts将会提供给random设备。
uramdom设备用来生成低质量的随机数序列

可以查看这两个设备的随机数

cat /dev/random

iXX"?c2磎?VoI-?

cat /dev/urandom

15OU·6A?????Ψ??:Q竰M*????m?h(?Ce{Υ??Q??}}門x?!a??b                                                        '·?2^~~S煦?旌?A??p???????2?/19??¥?Fˉe¤?1r2jB-o?v|'8??′XPo?????|T\?±:IЖ??-?f?M·?1?y¢L?<aUFp!??0?¢?P#?                                                                                                                                                                            \?? ?pμ?<?W??>F.?o?!t?i[±??B??p???8?AN?5Gj±G??c???iW              ??)Q%?¨y?H?&C`uxC????|?繛???£???kiF?`′?4?a?1s??                                                                  ?{Q?M?T????¥(??FVи?鴮?C?9;?]ЗГ4Zmg??{U?′μjf????????¥?r?SC???¤R:^a£??67_?St<?|操?q??5????Ε=G?aJ?S?ZP?0°wаμwJ£(?5?????;?%Ii十3?Th"+?£阅z?S!?C<$?E\???%0M挃¨???w@·Ta萁:s??V"£¤?????b?H??6bl]?p??JM1?r|\J&?s,?$?¤?>Q?S£b??O?eJvhF,PAX?#??|?7nQ??>?????_EOi;-????                                        ?K1dQ)??!? a9Kk?£Q?{?!?,&"?,$>[??_*?$|?a????]tuYA?O)L?-?x??`???ˉ??歅y?????3伪.aN$′C$??p3婘rD???F??Ж??o?oB???2鲻??F?NoE?hU??oG?G??j|??.′2>?pol2g)O$???-)9p_?xOBJ?УY???[??    ?鴃P??ghvBJ?a??圦ˋ???F{?                                                                                    ?k?3=\L?О?′A5B£8$o&ě′W聿?  ˉi?Y?┃?f?S                              ˉk?閦I?£???Dj9??#???ox?H8Q:?±?$?5??E??o??*?o?i′Иua齘?ǔ?&aR8?^j??¥su¨        ?±az??9K??o·9#?"a?|&????°DCv0^?′?"bvl ??=??$°q?`Cg淴Д劼?v4???vyw???YH'?i?6偢3潻?V/°μ?°C1?A???????|Q???уM9                                se?А?C??C???pXtt??a?£^??;gw?oeйCX?q°?6???ПSa????D+d??T3??]?YP|?KU:R飑 7??v¨b??oX??3·??BR

urandom能比random更快速生成随机数,但是随机数的随机性会差一些,有些可能会相同

也可以用测试的方法来测试,测试下面的两条。会发现random的只能生产几个,然后会很久才能再次生成,而urandom能很快的生产很多随机数

while [ 1 ];do /bin/dd if=/dev/random bs=20 count=1 2>/dev/null|md5sum; donewhile [ 1 ];do /bin/dd if=/dev/urandom bs=20 count=1 2>/dev/null|md5sum; done

结语:从/dev/random取值但是/dev/random取不到足够值的情况,这时候取值的进程将会等待,直到得到足够的random 值。而且会一直占用cpu时间,后果自己想哈
如果碰到这种情况的时候,可以这样:
#mv /dev/random /dev/random_bak
#ln -s /dev/urandom /dev/random
都用urandom来生成吧