皮皮网

皮皮网

【你懂的网站源码】【春哥求职招聘小程序源码】【卡密系统下单系统源码】随机视频源码_随机视频源码刷新一次更换一次影片(qq微信免杀过绿)

时间:2024-12-29 18:28:40 分类:知识

1.怎样将电网频率用于多媒体取证?面向音频取证的随机视频随机视频刷新电网频率检测与增强【有源码】
2.简单html代码?
3.视频直播网站源码,随机密码生成器
4.Python实现常见随机过程的源码源码影片模拟
5.Python实战案例,tkinter+random模块,次更实现课堂随机抽选提问并语音播报学生姓名
6.扒一扒随机数(Random Number)的换次诞生历史

随机视频源码_随机视频源码刷新一次更换一次影片(qq微信免杀过绿)

怎样将电网频率用于多媒体取证?面向音频取证的电网频率检测与增强【有源码】

       多媒体来源取证与真伪取证的方法有很多种,其中一种有趣的微信取证方法是通过分析音频中的电网频率(俗称电流声)在音频中留下的痕迹,可以有效地检测音视频文件的免杀你懂的网站源码产生时间,并进行各种取证。过绿该方法由武汉大学的随机视频随机视频刷新华光等老师提出,文末有源代码,源码源码影片供感兴趣的次更老师和同学参考。

       电网频率(electric network frequency,换次ENF)是微信指交流电网的传输频率,我国标称值为 Hz(其他国家也有 Hz),免杀是过绿被动多媒体取证的重要判据。它之所以能够成为取证判据,随机视频随机视频刷新主要有三个原因:首先,交流电和用电器的活动会产生以标称频率为基波的声学震动以及照明设备的灯光闪烁,这些不易被人感知的振动和闪烁可以被音视频录制设备捕捉,形成一种“被动不可见水印”;其次,电网频率在标称值附近随机小范围波动,赋予了电网频率轨迹的独特性;第三,电网频率波动模式在同一电网内部所有位置保持一致,赋予了电网频率波动的一致性。经过多年的发展,电网频率判据已可用于音视频文件产生时间溯源、篡改检测与定位、地理位置溯源、重放攻击检测等取证任务。目前,电网频率分析是录音文件产生时间被动溯源的唯一有效方法。

       然而,基于电网频率判据的数字取证研究仍面临一些困难。首先,并不是任意设备在任意条件下都能成功捕捉电网频率;其次,电网频率相对于录音内容和环境噪声十分微弱,在无法控制录音条件的实际取证任务中难以进行有效提取和分析。针对这两个问题,本项工作分别提出了录音文件中电网频率的检测和增强算法,并建立并开源了目前最大的“电网频率-武汉大学”(ENF-WHU)真实世界录音文件数据集,用于对相关算法进行全面评估。春哥求职招聘小程序源码

       为确认待验录音文件中是否存在电网频率以保证后续取证分析有效,本工作从信号检测理论出发,逐步放宽对信号模型的假设,推导出电网频率的一系列理论和实际检测器。其中,只有本工作提出的TF-detector为恒虚警率(CFAR)检测器。

       由于信号模型和特性的巨大差异,现有语音(或其他信号)的增强的方法均无法有效增强电网频率信号。对于检测到电网频率的录音文件,为提升其可用性,本工作提出了一种适合电网频率随机小范围缓慢波动特性的鲁棒滤波算法(robust filtering algorithm,RFA),将观测到的带噪电网频率信号调制到正弦频率调频(SFM)解析信号的瞬时频率,并引入核函数,通过处理其产生的正弦时频分布,逐个恢复去噪后的电网频率观测样本,显著提升了电网频率轨迹的质量,为后续取证分析提供了可靠数据。

       以上工作为提升电网频率判据在实际取证中的可靠性,促进基于电网频率判据的录音文件取证从实验室走向实际应用提供了技术支撑。相关成果于和年分别发表在IEEE Transactions on Information Forensics and Security,作者为武汉大学华光、张海剑、廖晗、王清懿、叶登攀。

       ENF-WHU数据集和MATLAB程序已开源:

       github.com/ghuawhu/ENF-...

       Guang Hua and Haijian Zhang*, “ENF signal enhancement in audio recordings,” IEEE Transactions on Information Forensics and Security, vol. , pp. -, .

       Guang Hua, Han Liao, Qingyi Wang, Haijian Zhang*, and Dengpan Ye, “Detection of electric network frequency in audio recordings – from theory to practical detectors,” IEEE Transactions on Information Forensics and Security, vol. , pp. -, .

简单html代码?

       html简单网页代码怎么写?

       1、在电脑桌面空白处单击右键,新建一个记事本并打开

       2、在新建文件中输入如下代码。html语言都是以htmlheadtitlebody等标签开始,以/html/head/title/body标签作为结束。

       3、接下来要在title/title标签中间输入标题(如个人网页)在body/body中输入“自己做的第一个网页,厉害吧!”完成后点击保存。并将记事本后缀名.txt改为.html格式

       4、将记事本重命名为.html格式后,出现如下格式。

       5、双击打开此文件就会出现浏览器网页效果了。

       æ‰©å±•èµ„料:

       å‰ç«¯å’ŒåŽç«¯çš„区别:

       1、展示方式

       å‰ç«¯æŒ‡çš„是用户可见的界面,网站前端页面也就是网页的页面开发,比如网页上的特效、布局、图片、视频,音频等内容。前端的工作内容就是将美工设计的效果图的设计成浏览器可以运行的网页,并配合后端做网页的数据显示和交互等可视方面的工作内容。

       åŽç«¯æ˜¯æŒ‡ç”¨æˆ·çœ‹ä¸è§çš„东西,通常是与前端工程师进行数据交互及网站数据的保存和读取,相对来说后端涉及到的逻辑代码比前端要多,后端考虑的是底层业务逻辑的实现,平台的稳定性与性能等。

       2、所用技术

       å‰ç«¯å¼€å‘用到的技术包括但不限于html5、css3、javascript、jquery、Bootstrap、Node.js、Webpack、AngularJs、ReactJs、VueJs等技术。

       åŽç«¯å¼€å‘以java为例,主要用到的包括但不限于Struts、spring、springmvc、HibernateHttp协议、Servlet、Tomcat服务器等技术。

       3、工作职责

       å‰ç«¯å·¥ç¨‹å¸ˆä¸»è¦çš„工作职责分为三大部分,分别是传统的Web前端开发,移动端开发和大数据呈现端开发。

       åŽç«¯å·¥ç¨‹å¸ˆçš„主要职责也集中在三大部分,分别是平台设计、接口设计和功能实现。

       4、知识结构

       åœ¨çŸ¥è¯†ç»“构方面,前端开发涉及到的内容包括Html、CSS、JavaScript、Android开发(采用Java或者kotlin)、iOS开发(采用OC或者Swift)、各种小程序开发技术(类Html),随着前端开发任务的不断拓展,前端开发后端化也是一个较为明显的趋势。

       åŽç«¯å¼€å‘的重点在于算法设计、数据结构、性能优化等方面,在具体的功能实现部分可以采用Java、Python或者PHP等编程语言来实现。

       ç½‘页设计常用HTML代码

       ç½‘页设计常用HTML代码大全

       HTML是用来描述网页的一种语言。下面我为大家分享HTML代码,希望对大家学习html代码有帮助!

       å¿½è§†å³é”®

       bodyoncontextmenu="returnfalse"

       æˆ–

       bodystyle="overflow-y:hidden"

       1.如何几秒后转到别的页面?

       METAHTTP-EQUIV="Refresh"CONTENT="时间;URL=地址"

       2.点击关闭窗口

       ahref="javascript:top.window.close();"点击关闭窗口/a!

       3.请问如何去掉主页右面的滚动条?

       bodyscroll="no"

       bodystyle="overflow-y:hidden"

       4.请问如何做到让一个网页自动关闭.

       html

       head

       OBJECTid=closestype="application/x-oleobject"classid="clsid:adba6-d8ff-cf--aab7a"

       paramname="Command"value="Close"

       /object

       /head

       bodyonload="window.setTimeout(‘‘‘‘closes.Click()‘‘‘‘,)"

       è¿™ä¸ªçª—口会在秒过后自动关闭,而且不会出现提示./body

       å¦‚何在不刷新页面的情况下刷新css?

       style

       button{ color:#;}

       /style

       buttononclick=document.styleSheets[0].rules[0].style.color=‘‘‘‘red‘‘‘‘点击按钮直接修改style标签里button选择符使按钮改为红色/button

       è¯·é—®å¦‚何让网页自动刷新?

       åœ¨head部记入METAHTTP-EQUIV="Refresh"content=""其中为秒后自动刷新,你可以更改为任意值。

       5.如何让页面自动刷新?

       æ–¹æ³•ä¸€ï¼Œç”¨refresh

       HTML代码片段如下:

       head

       metahttp-equiv="refresh"content="5"

       /head

       5表示刷新时间

       [Ctrl+A全部选择提示:你可先修改部分代码,再按运行]

       æ–¹æ³•äºŒï¼Œä½¿ç”¨setTimeout控制

       imgsrc=/logo.gif

       script

       functionrl(){

       document.location.reload()

       }

       setTimeout(rl,)

       /script

       6.如何让超链接没有下划线

       åœ¨æºä»£ç ä¸­çš„HEAD…/HEAD之间输入如下代码:

       styletype="text/css"!--

       a{ text-decoration:none}

       --/style

       7.请问如何去掉IE的上下滚动条?

       bodystyle=‘‘‘‘overflow:scroll;overflow-y:hidden‘‘‘‘

       /body

       8.怎样才能把RealPlayer文件在网页做一个试听连接?

       embedheight=src=js.rmtype=audio/x-pn-realaudio-pluginwidth=autostart="false"controls="PlayButton"

       9.如何用html实现浏览器上后退按钮的功能?

       ahref="javascript:history.go(-1)"点击后退/a

       æˆ–者

       scripthistory.back()/script

       .请问怎么在网页中改变鼠标的箭头形状?

       HTML代码片段如下:

       body

       ahref="#"style="cursor:auto;"auto/abr

       ahref="#"style="cursor:crosshair"crosshair/abr

       ahref="#"style="cursor:default"default/abr

       ahref="#"style="cursor:hand"hand/abr

       ahref="#"style="cursor:move"move/abr

       ahref="#"style="cursor:e-resize"e-resize/abr

       ahref="#"style="cursor:ne-resize"ne-resize/abr

       ahref="#"style="cursor:nw-resize"nw-resize/abr

       ahref="#"style="cursor:n-resize"n-resize/abr

       ahref="#"style="cursor:se-resize"se-resize/abr

       ahref="#"style="cursor:sw-resize"sw-resize/abr

       ahref="#"style="cursor:s-resize"s-resize/abr

       ahref="#"style="cursor:w-resize"w-resize/abr

       ahref="#"style="cursor:text"text/abr

       ahref="#"style="cursor:wait"wait/abr

       ahref="#"style="cursor:help"help/abr

       /body

       .怎样不使用页面的缓存?即每一次打开页面时不是调用缓存中的东西

       METAHTTP-EQUIV="Pragma"CONTENT="no-cache"

       .页面打开时自动弹出一个窗口的代码怎么写?

       HTML代码片段如下:

       html

       head

       titleUntitledDocument/title

       metahttp-equiv="Content-Type"content="text/html;charset=gb"

       scriptlanguage="Bstyle="color:black;background-color:#A0FFFF"javascript/B"

       !--

       functionMM_openBrWindow(theURL,winName,features){ //v2.0

       window.open(theURL,winName,features);

       }

       //--

       /script

       /head

       bodybgcolor="#FFFFFF"text="#"onLoad="MM_openBrWindow(‘‘‘‘‘‘‘‘,‘‘‘‘,‘‘‘‘width=,height=‘‘‘‘)"

       /body

       /html

       .如何让我的页面出现一个会讲话的小人?Merlin

       HTML代码片段如下:

       HTML

       HEAD

       TITLE默林/TITLE

       METAhttp-equiv=Content-Typecontent="text/html;charset=gb"

       /HEAD

       BODY

       pOBJECTid=simsclassid=CLSID:DFDB-5C6E-D1-9EC1-CFDF

       /OBJECT

       SCRIPT

       varMerlinID;

       varMerlinACS;

       sims.Connected=true;

       MerlinLoaded=LoadLocalAgent(MerlinID,MerlinACS);

       Merlin=sims.Characters.Character(MerlinID);

       Merlin.Show();

       Merlin.Play("Surprised");

       Merlin.Speak("大家好");

       Merlin.Play("GestureLeft");

       Merlin.Think("我是默林!");

       Merlin.Play("Pleased");

       Merlin.Think("可爱吗?");

       Merlin.Play("GestureDown");

       Merlin.Speak("哈哈!");

       Merlin.Hide();

       functionLoadLocalAgent(CharID,CharACS){

       LoadReq=sims.Characters.Load(CharID,CharACS);

       return(true);

       }

       /SCRIPT

       /p

       p/p

       p看此效果必须装有office!!!/p

       /BODY

       /HTML

       .在页面中如何加入不是满铺的背景图片,拉动页面时背景图不动

       HTML代码片段如下:

       htmlhead

       STYLE

       body{ background-image:url(logo.gif);

       background-repeat:no-repeat;background-position:center}

       /STYLE

       /head

       bodybgproperties="fixed"

       /body

       /html

       [Ctrl+A全部选择提示:你可先修改部分代码,再按运行]

       background-repeat:no-repeat;是让背景图不占满整个页面

       bodybgproperties="fixed"是拉动scroll时背景图不动

       .文本输入框什么属性能实现不可输入?

       HTML代码片段如下:

       inputtype="text"name="textfield"disabled

       æˆ–者

       inputtype="text"name="textfield"readonly

       .如何禁止自己的页面在别人的框架里打开?

       æŠŠä»¥ä¸‹ä»£ç åŠ è‡³ä½ çš„head区

       script

       if(window.top!=self){

       window.top.location=self.location

       }

       /script

       .如何实现首页全屏幕显示?

       HTML代码片段如下:

       html

       bodyscriptlanguage="Bstyle="color:black;background-color:#A0FFFF"javascript/B"

       varcoolw=

       varcoolh=

       varcoolhuang=window.open("","coolhuang","width="+coolw+",height="+coolh+",

       fullscreen=1,toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=0")

       window.close()

       /script/body/html

       .如何监听一个窗口被关闭了?

       HTML代码片段如下:

       bodyonunload="alert(‘‘‘‘你关闭了这个窗口‘‘‘‘)"

       .如何禁止Ctrl+N?

       HTML代码片段如下:

       bodyonkeydown=return(!(event.keyCode==event.ctrlKey))

       å¦‚何把页面加入用户的收藏夹?

       HTML代码片段如下:

       ahref="Bstyle="color:black;background-color:#A0FFFF"javascript/B:window.external.AddFavorite(‘‘‘‘‘‘‘‘,‘‘‘‘无忧脚本‘‘‘‘)"收藏无忧脚本/a

       å¦‚何在我的'页面中加入背景音乐?

       IE:bgsoundsrc="*.mid"loop=infinite

       NS:embedsrc="*.mid"autostart=truehidden=trueloop=true

       *.mid你的背景音乐的midi格式文件

       å…³äºŽé¡µé¢è½¬æ¢æ•ˆæžœ

       metahttp-equiv="page-enter"content="revealTrans(Duration=4,Transition=)"

       æˆ–

       metahttp-equiv="page-exit"content="revealTrans(Duration=4,Transition=)"

       è¯´æ˜Žï¼šTransition=是随机效果,另可以选0-任一数字固定某个效果

       å¦‚何设定打开页面的大小

       HTML代码片段如下:

       bodyonload="top.resizeTo(,);"!--(width,height)--

       æ€Žæ ·åŒå‡»æ»šå±ï¼Œå•å‡»åœæ­¢ï¼Ÿ

       HTML代码片段如下:

       html

       head

       title新网页1/title

       /head

       body

       scriptlanguage"Bstyle="color:black;background-color:#A0FFFF"javascript/B"

       varcurrentpos,timer;

       functioninitialize()

       {

       timer=setInterval("scrollwindow()",);

       }

       functionsc(){

       clearInterval(timer);

       }

       functionscrollwindow()

       {

       currentpos=document.body.scrollTop;

       window.scroll(0,++currentpos);

       if(currentpos!=document.body.scrollTop)

       sc();

       }

       document.onmousedown=sc

       document.ondblclick=initialize

       /script

       pa/ppa/ppa/ppaa/ppaa/ppaa/p

       paa/ppaa/ppaa/ppaa/ppaa/ppaa/p

       paa/ppaa/ppaa/ppaa/ppaa/ppaa/p

       paa/ppaa/ppaa/ppaa/ppa/p

       /body

       /html

       å¦‚何让body中的文字不被选中?

       HTML代码片段如下:

       bodyonselectstart="returnfalse"aaa/body

       å¦‚何让弹出的窗口不能关闭?

       åœ¨æ–°å¼€çš„窗口中加入如下代码

       bodyonunload=open(location.href)

       /body

       å¦‚何让浏览器在保存页面时保存失败?

       HTML代码片段如下:

       NOSCRIPT

       Bstyle="color:black;background-color:#ffff"IFRAME/BSRC="*.html"

       /Bstyle="color:black;background-color:#ffff"IFRAME/B

       /NOSCRIPT

       è¡¨å•ä¸­å¦‚何用图片按钮实现reset?

       html

       head

       script

       functionaaa(){

       document.forms[0].reset()

       }

       /script

       /head

       body

       form

       textarearows="2"name="S1"cols=""/textarea

       inputtype="submit"values="提交"name="B1"

       imagesrc="logo.gif"onclick=aaa()

       /form

       /body/html

       è¿›å…¥ç½‘页时弹出的信息对话框

       bodyonLoad="window.alert(‘‘‘‘欢迎光临本站‘‘‘‘)"

       å…³é—­çª—口后弹出对话框

       bodyonUnload="window.alert(‘‘‘‘谢谢你的光临!欢迎下次再来!‘‘‘‘)"

       å‘Šåˆ«æç¤º

       bodyonUnload=alert("再见,感谢你的访问!")

       å³é”®èœå•çš„制作

       OBJECTid=menutype="application/x-oleobject"classid="clsid:adba6-d8ff-cf--aab7a"

       PARAMname="Command"value="RelatedTopics,menu"

       PARAMname="Item1"value="动易;"

       PARAMname="Item2"value="搜狐;"

       PARAMname="Item3"value="新浪;"

       PARAMname="Item4"value="网易;"

       PARAMname="Item5"value="互动学院;"

       /OBJECTscriptif(document.all)document.body.onmousedown=newFunction("if(event.button==2)menu.Click();")/script

       ä¸‹æ‹‰èœå•

       objectid=HHCtrltype="application/x-oleobject"classid="clsid:adba6-d8ff-cf--aab7a"PARAMname="Command"value="RelatedTopics,Menu"PARAMname="Item1"value="aspease;"PARAMname="Item2"value="byhu;"PARAMname="Item3"value="lzz;"/objectahref=javascript:HHCtrl.Click()title="下拉菜单"下拉菜单/a

一个完整的html代码怎么编写?

       ç®€å•çš„htm的编写过程如下:

       å…ˆæ–°å»ºä¸€ä¸ªæ–‡æœ¬æ–‡ä»¶ï¼Œå¯ä»¥è‡ªå·±å‘½åï¼Œå¦‚下图,我命名为测试。

       ç¼–译文本,以最简单的代码格式为例htmlheadtitle/title/headbody/body/html

       åœ¨body/body写入你要写的内容,下面以helloworld为例。

视频直播网站源码,随机密码生成器

       视频直播网站源码,随机密码生成器,提供了强大的密码创建功能。密码生成器确保每条密码都随机且独特,显著提升账户安全。它采用复杂算法,保证生成的密码既安全又难以破解。不仅如此,系统内还设置密码检测器,实时评估密码质量,确保生成的密码符合安全标准。

       该源码具备方法调用,卡密系统下单系统源码简化了开发过程,让开发者能够快速集成密码生成和检测功能至自己的项目中。通过调用特定方法,即可轻松生成并检验密码,无需额外编码或设计。此外,源码内附带详细文档,指导开发者正确使用功能,确保无缝集成。

       随机密码生成器进一步增强了安全性。它基于复杂算法,生成的密码长度可自定义,范围从8位至位不等。每条密码都经过检测器检查,确保其强度满足现代安全标准。生成的密码包含字母、数字和特殊字符的组合,使得破解密码变得极其困难。

       除了提供基本的密码生成和检测功能,源码还支持密码强度等级划分,帮助开发者根据不同场景需求灵活配置密码策略。无论是简单的个人账户还是高度敏感的企业系统,都可以通过调整参数获得适合的安全等级。

       总而言之,视频直播网站源码,随机密码生成器是一个功能全面、易于集成的解决方案,为网站安全提供了坚实的基础。它通过强大的密码生成器和检测器,确保用户账户安全,同时简化了开发过程。无论您是寻求增强现有网站安全性的开发者,还是希望在新项目中实现高效密码管理的创业者,这个源码都是理想的选择。

Python实现常见随机过程的模拟

       一、常见随机过程介绍

       1. 几何布朗运动(GBM):这是Black-Scholes在年引入的期权定价过程的基础,尽管存在一些缺陷和与实证研究的冲突,GBM仍然是期权和衍生品估值的关键过程。

       2. CIR模型:这个平方根扩散过程,星月峰蜂胶溯源码在哪看由Cox, Ingersoll和Ross在年提出,用于描述均值回复的量,如利率或波动率,并且保持为正数。

       3. 跳跃扩散过程(Jump Diffusion):Merton在年首次提出,将几何布朗运动与对数正态分布的跳动成分相结合,允许我们更好地评估如短期虚值(OTM)期权的定价,特别是当需要考虑在较大跳动可能性下进行定价。

       4. Heston模型:Heston在年提出了一种描述标的资产波动率变化的数学模型,它假设资产收益率的波动率不是恒定的,而是遵循一个随机过程。

       5. SABR模型:SABR模型由Hagan在年提出,它是一种随机波动率模型,假设隐含波动率是几何布朗运动,并且将隐含波动率设置为标的资产价格和期权行权价的函数,融合了随机波动率模型和局部波动率模型的思路,更准确地描绘了符合市场特征的隐含波动率曲线。

       二、常见随机过程的模拟

       1. 几何布朗运动

       几何布朗运动的随机微分方程如下,意味着我们在等价鞅测度下进行操作:

       其中,Wt是布朗运动,μ和σ为常数,εt服从正态分布(期望为0,方差为1)。

       通过欧拉离散化得到离散时间模型,用于模拟证券价格。

       案例分析1

       模拟证券初始价格为(日收益率均值为0.,波动率为0.),时间为1年,步长以日为单位,次数为次的几何布朗运动价格。

       注最终股价大致服从对数正态分布。

       注股价走势服从随机布朗运动。

       2. 平方根扩散过程(CIR模型)

       CIR模型(Square-Root Diffusion)由Cox-Ingersoll和Ross在年提出,用于模拟随机短期利率。其随机微分方程如下:

       参数解释:θ为平均利率;xt为现行短期利率;κ为调整速率;σ√xt表示利率较高时波动率较大。

       欧拉离散化后的方程用于模拟最终利率。

       案例分析2

       模拟初始利率为0.,均值回归系数κ=3.0,通达信准备拉升指标源码长期均值项θ=0.,波动率σ=0.1,时间为2年,步长以日为单位,次数为次的CIR模型利率。

       注最终利率分布频数最多时趋向于均值θ=0.。

       注模拟最终趋势趋向于均值θ=0.。

       3. 跳跃扩散过程

       跳跃扩散过程的随机微分方程描述为:

       参数说明:μ为漂移率;σ为证券波动率;Qt为跳跃强度为λ的泊松过程;η-1为跳跃高度;κ为跳跃均值v的预期;σJ为跳跃波动率。

       欧拉离散化后的方程用于模拟证券价格的跳跃扩散过程。

       案例分析3

       模拟证券价格的跳跃扩散过程,初始价格,漂移率μ=0.,收益率波动率σ=0.2,跳跃强度λ=0.,预期跳跃均值v=-0.6,跳跃强度波动率σJ=0.,时间为1年,步长以日为单位,模拟次数为次的股票价格。

       注最终价格呈现双峰的直方频数图。

       三、随机波动率模型(Heston Model)

       SABR模型(SABR Model)

       更多详细内容,欢迎查阅作者的书籍:《Python金融量化实战固定收益类产品分析》,本书适合金融与科技结合的Python应用入门,包含丰富配套资源如源代码、视频导读和AI入门资料。

Python实战案例,tkinter+random模块,实现课堂随机抽选提问并语音播报学生姓名

       实现课堂随机抽选提问并语音播报学生姓名的Python实战案例,具体步骤如下:

       开发工具:Python版本为3.6,使用tkinter、time、random模块。

       环境搭建:安装Python,添加到环境变量,使用pip安装tkinter、time、random模块。

       核心功能设计:设置自定义学生姓名或通过学号随机抽取学生,语音播报学生姓名。

       实现步骤:通过tkinter模块进行排版布局设计,包括读取学生名单、随机打乱、实现随机点名抽取语音播报功能、滚动显示学生名单等。

       最后,分享编程干货回馈读者,包括Python电子书、标准库资料、爬虫项目源码、学习视频和路线图等资源。

       读者可通过转发本文,获取包含+Python电子书、最全Python标准库资料、四五十个爬虫项目源码、Python基础到进阶学习视频和学习路线图在内的编程干货。

扒一扒随机数(Random Number)的诞生历史

       在所有的产生随机数的事物中,我认为没有什么能够超越骰子了”,这是统计学家 Francis Galton 在 年的《自然》杂志中写道。它们在容器中不断地翻滚、互相撞击,以各种形式和角度与容器壁发生碰撞,在容器中的位置和形态在外界看来都是那么不可预知,容器哪怕只发生一次晃动,外界都不可能知道里面到底是什么形态。古已有之的随机数

       到底如何才能生成均匀的随机数列呢?自然界中随机性大量而近乎完美的存在,人类并不能准确地预知和量化这种随机性。迄今为止发现最早的骰子(4 个面)是来自中东的一座公元前 世纪的坟墓里。再近一些的历史是在公元前 年的中国,利用火烧龟壳产生的随机龟裂现象,一些“先知”会根据龟裂情况来对未来做判断。又过了几个世纪,在中国诞生了易经占卜法,利用 蓍草法进行占卜,其操作的分裂过程很类似于抛硬币。

       机器生成随机数的第一次触碰

       时间到了 世纪 年代中期,现代世界需要更多的随机数,不再是骰子或者蓍草可以满足的了。RAND 公司发明了一种机器,通过随机脉冲发生器可以生成大量的随机数。他们将这个机器运行所产生的数字聚合起来并发布成图书 “A Million Random Digits with , Normal Deviates”。这在现在看来是十分荒谬的,但是在当时却是一个突破。这是人类第一次产生如此大量的、高质量的随机数,并且对公众是开放的。这本书 RAND 公司一直印刷到了 年,现在在 亚马逊上也可以看得到。

       于此类似的机器:摇奖机,是由著名的 Bletchley Park WWII 破译小组在 世纪 年代发明的,当时被用来生成英国保险债券**所使用的随机数。为了平息公众对摇奖机的公平性和准确性的质疑和担心,官方斥资制作了当时的巨型纪录片:“摇奖机的重要性(The Importance of Being E.R.N.I.E.)”。下面给出视频,很值得一看。

        年随机性终于被正式规范化并且整合到了计算机 Ferranti Mark 1 号中。Ferranti Mark 1 号内置了随机数生成指令,利用电气噪声可以一次性生成 个随机比特位。这一特性是由阿兰·图灵设计的。Christopher Strachey 利用这一特点,编写了一套随机情书生成器。下面这是情书例子,利用这个程序生成的 David Link 的 复合计划:

       JEWEL LOVE MY LIKING HUNGERS FOR YOUR ADORABLE INFATUATION. YOU ARE MY EROTIC ARDOUR.: MY FOND RAPTURE. MY THIRST SIGHS FOR YOUR INFATUATION. MY HEART SEDUCTIVELY WISHES YOUR BREATHLESS LONGING.YOURS CURIOUSLYM. U. C.

       (由于上面文字过于漏骨,译者尝试引申出译文如下)

       我对你的可爱迷恋至极。你勾起了我所有对情爱的幻想。我为你而狂热。你的魅力使我对你充满了渴望。我的心随你在而让我无法呼吸。你的追求者M.U.C

       但是图灵的随机数指令几乎是当时的开发人员崩溃的,因为这种随机在本身就已经很不稳定的开发环境下又引入了不确定性。人们希望在软件中得到一致性的结果,但是用这种指令的软件永远不可能得到可重复的一致性结果,这也使得软件测试几乎变的不可行。

       那么如果随机数生成器可以由一个确定性的函数来替代会怎样呢?如果在给定一个确定的初始条件,每次可以生成同样的随机序列会怎样呢?这就是伪随机数生成器(PRNG)。

       伪随机数生成器(PRNG)

       伪随机数生成器是由冯诺依曼在 年创造的。他的基本思想是从一个随机数种子开始,对其平方,然后取中间值。接下来重复对得到的数取平方并取中间值的过程,就会得到一个具有统计意义属性的随机数序列了。这也就是广为人知的 平方取中法。

       然而,冯诺依曼的方法并没有经得住时间的考验,因为不论从什么随机种子开始,序列最终都会落入某个短循环序列,比如:,,,,,……。

       序列中的数字是依赖于前一个数字的这种生成函数,上面的重复循环问题是不可避免的。但是如果说这个循环间隔非常非常大,对实际应用并不会产生影响,那会怎样呢?

        年,数学家 D.H.Lehmer 利用 线性同余生成器(LCG)实现了这一思路。下面给出的是基于 Lehmer 的方法所实现的一种朴素 PRNG,叫做 中央随机数生成器,使用 JavaScript 在 年写的。

       注意代码中的魔法数字(如 等),这些数字(通常是质数)是用来最大化重复区间的——上面所提到的自我重复的循环区间。这种 PRNG 使用当前时间作为种子值,重复区间可以达到 2 的 次方。

       这种中央随机生成器发明之初非常流行,因为那时的 JavaScript 1.0 还没有内置 Math.random() 函数,当时的 Web 1.0 环境下,大家都想让自己的 banner 广告随机旋转。一个开发者 Paul Houle 说道:“它在很多情况下已经很好用了,但是不能使用它来做保密使用”。

       对 PRNG 的更高要求

       互联网确实需要保密。SSL 诞生在 年,它的加密方案需要高质量的 PRNG。它的发展也直接导致了一段时间的 PRNG 野蛮创新时期。如果你回头看一下 所有的随机数生成器的专利,你可能会感受到就像现代版的第一次制造飞机的浪潮一样。

        世纪 年代中期的 CPU 是没有内置随机数生成指令的,这使得那时候好的随机种子特别难得。本来这问题也不大,不过当飞利浦的 Hallam-Baker 发现 Netscape(当时市场上的巨头)的 SSL web 服务器使用了“当前时间 + 一组特殊 ID”组合作为种子的时候,这个问题变成了一个切身体会到的安全问题了。Hallam-Baker 展示了一个攻击者很容易猜到种子值,并且对他们所拿到的服务器流量进行解密的过程。猜种子值是一个非常常规的攻击手段,尽管这种手法现在变得越来越困难。这里给出 年在 Hacker News 上的一段非常经典的攻击演练。

       到了 年,计算机科学家们厌倦了生成随机数所受限的条件,来自 SGI 的一个团队发明了 LavaRand,它是用一个网络摄像头来对着熔岩灯拍照。从摄像头中过来的数据是一个真实的熵源——像图灵那样的真实随机数生成器(TRNG)——可以以 kb/s 的速率生成随机数。一如当时硅谷的风格,熔岩灯平台很快拿到了 专利。

       AutoDesk 的创始人 John Walker 在全世界范围内推广他的 HotBits,这是一种“随机数即服务”的应用,背后原理是盖革计数器来保证其量子随机性。 年成立的 Random.org 为互联网提供真正的随机数。他们提供的服务包括真正的抛硬币随机、骰子随机和卡牌洗牌随机等。

       上面所提到的大多数算法后来都无人问津了,但是一个叫做梅森旋转随机数生成器(The Mersenne Twister)的软件 PRNG 鹤立鸡群,它是由松本真(Makoto Matsumoto)和西村 拓士(Takuji Nishimura)在 年发明的。它完美地平衡了性能和随机数的质量,并且经受住了时间的考验。其基本思想是基于 线性反馈移位寄存器(LFSR),产生一个循环周期非常长的确定性序列,循环周期能够达到 2¹⁹⁹³⁷− 1。在当前的编程语言中,这种算法依旧是默认的 PRNG。

       在 年,随机数市场发生了一个巨大的变化,Intel 在其 i 芯片组上集成了芯片级的随机数生成器。这样使得新的服务器都自带热噪声的本地源随机数生成能力——真正的随机数生成器(TRNG)。这很伟大,但是它始终没有软件 PRNG 快,所以加密软件依旧不得不依赖于伪随机数生成器(PRNG)。

       这就把我们带到了“密码安全 PRNG”(CSPRNG)(这些讨厌的缩写!难怪很多人认为计算机科学很烦人)。CSPRNG 对于 SSL 特别重要。那么 CSPRNG 的原理是什么呢?这里有一份 页的论文来介绍 CSPRNG。祝你在里面阅读愉快。

       不言而喻,CSPRNG 是一个强需求。梅森旋转随机数生成器并不是一种 CSPRNG,因为如果可以给定大量的先前序列样本,后面的数字是可以预计的出来。

       时间再拉近一些, 年,Intel 为 TRNG 增加了 RDRAND 和 RDSEED 指令,具有 MB/s 的生产效率。但是 RDRAND 的完整性一直被质疑,里面是不是有某些缺陷?或者是为美国国家安全局内置了什么东西?没人确切地知道这个问题的答案,我猜某些地方的某些人一定知道,可是他们也一定不会公开。

       开源硬件随机数生成器

       (由一种硬件随机数生成器 PEDOUBLER 生成的随机数据)

       近些年开源硬件 TRNG 也逐渐显露头角。它们广受欢迎得益于其设计的透明化:你可以自己构建线路,也可以用现有的组件搭建。完全的透明化使得对硬件随机数生成没有任何的担心和疑虑。 REDOUBLER和 无限噪声 TRNG是两个开源硬件随机数生成器,链接中给出他们的 Github 源码地址。

       结尾

       今天依旧有关于对随机数生成方法选择的争论,在操作系统内核、编程语言和安全包(如 OpenSSL 或者 OpenSSH)方面均未停止。有许多不同的算法聚焦于不同的特点上,如速度、占用空间、安全性等方面,也有一些安全专家依旧在寻找攻破已有算法的方法。但是对于我们日常的使用来讲,在大多数的操作系统中你可以放心地使用/dev/random,或者编程语言中你可以随心地使用 rand() 函数,都能给你带来很好的使用体验,并且你这么做,阿兰·图灵也会很开心。