一种随机数获得方法、装置、系统及存储介质
技术领域
本发明涉及计算机应用技术领域,尤其涉及一种随机数获得方法、装置、系统及存储介质。
背景技术
目前,随机数的使用场景、使用范围越来越广,比如,抽签、摇号等场景中都可使用。
在现有技术中,会预先保存一些数据到随机数种子库中,在需要获得随机数时,从随机数种子库中选取一个数据作为随机数种子,通过随机函数的作用生成随机数。
在这种方法中,随机数种子库中的随机数种子相对较为固定,从而使得生成的随机数相对固定,如果随机数种子库被恶意获取,将会使得生成的随机数被恶意破解,无法保证随机数的公平公正。
发明内容
本发明的主要目的在于提供一种随机数获得方法、装置、系统及存储介质,旨在解决无法保证获得的随机数的公平公正的技术问题。
为实现上述目的,本发明提供的一种随机数获得方法,包括:
获得指定时间点的公开数据,所述指定时间点为在所述指定时间点之前预先指定的时间点;
获得所述公开数据的哈希值;
基于所述哈希值,确定随机数种子;
将所述随机数种子加入到预设的随机函数中,获得随机数。
可选地,所述基于所述哈希值,确定随机数种子,包括:
将所述哈希值中设定位的数值确定为随机数种子。
可选地,所述将所述随机数种子加入到预设的随机函数中,获得随机数,包括:
通过预设的随机函数对所述随机数种子取值N次,获得随机数,N为正整数。
可选地,所述获得所述公开数据的哈希值,包括:
对所述公开数据进行哈希计算,获得所述公开数据的哈希值。
可选地,所述公开数据为比特币区块哈希值、哈希碰撞的值、气象云图或A股指数。
为实现上述目的,本发明进一步提供一种随机数获得装置,包括存储器和处理器,所述存储器上存储有可在所述处理器上运行的随机数获得程序,所述随机数获得程序被所述处理器执行时实现如下方法:
获得指定时间点的公开数据,所述指定时间点为在所述指定时间点之前预先指定的时间点;
获得所述公开数据的哈希值;
基于所述哈希值,确定随机数种子;
将所述随机数种子加入到预设的随机函数中,获得随机数。
可选地,所述随机数获得程序被所述处理器执行时具体实现:
将所述哈希值中设定位的数值确定为随机数种子。
可选地,所述随机数获得程序被所述处理器执行时具体实现:
通过预设的随机函数对所述随机数种子取值N次,获得随机数,N为正整数。
可选地,所述随机数获得程序被所述处理器执行时具体实现:
对所述公开数据进行哈希计算,获得所述公开数据的哈希值。
为实现上述目的,本发明进一步提供一种随机数获得系统,所述系统包括:
公开数据获得单元,用于获得指定时间点的公开数据,所述指定时间点为在所述指定时间点之前预先指定的时间点;
哈希值获得单元,用于获得所述公开数据的哈希值;
随机数种子确定单元,用于基于所述哈希值,确定随机数种子;
随机数获得单元,用于将所述随机数种子加入到预设的随机函数中,获得随机数。
为实现上述目的,本发明进一步提供一种可读存储介质,所述计算机可读存储介质上存储有随机数获得程序,所述随机数获得程序可被一个或者多个处理器执行,以实现上述任一项所述的随机数获得方法。
为实现上述目的,本发明进一步提供一种计算机程序产品,包括计算机指令,当其在计算机上运行时,使得计算机可以执行上述任一项所述的随机数获得方法。
应用本发明实施例所提供的技术方案,获得指定时间点的公开数据后,获得公开数据的哈希值,基于哈希值,确定随机数种子,将获得的随机数种子加入到预设的随机函数中,获得随机数。指定时间点为在指定时间点之前预先指定的时间点,指定时间点的公开数据具有随时间随机的特性,在指定时间点之前,任何人都不可预测该指定时间点的公开数据,对指定时间点的公开数据进行哈希计算,得到哈希值,进而基于哈希值确定的随机数种子得到的随机数更加公开公正,而且,在指定时间点之后,所有人均可基于获得的指定时间点的公开数据,对随机数进行验证。
附图说明
图1为本发明实施例中一种随机数获得方法的实施流程图;
图2为本发明实施例中一种随机数获得装置的结构示意图;
图3为本发明实施例中一种随机数获得系统的结构示意图;
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
需要说明的是,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
参见图1所示,为本发明实施例所提供的一种随机数获得方法的实施流程图,该方法可以包括以下步骤:
S110:获得指定时间点的公开数据。
指定时间点为在指定时间点之前预先指定的时间点。
在本发明实施例中,在需要生成随机数时,可以预先指定未来的一个时间点,基于该指定时间点的公开数据获得所需要的随机数。也就是说,指定时间点为指定时间点之前预先指定的时间点。在指定时间点之前,任何人都不可预测该指定时间点的公开数据,该公开数据只有在到达指定时间点时才能产生,具有随时间随机的特性。
在达到指定时间点时,或者在达到指定时间点后的设定时间段内,可以获得指定时间点的公开数据。具体的,可以通过互联网络或者其他公开的第三方信息查询得到。公开数据具体可以为比特币区块哈希值、哈希碰撞的值、气象云图或A股指数,当然,也可以是其他数据,只要这些数据在指定时间点才能产生即可。比特币区块哈希值每10分钟更新一次,气象云图每15分钟更新一次,在未到达更新时间点时,任何人无法预测相应数据。
S120:获得公开数据的哈希值。
获得指定时间点的公开数据后,可以获得公开数据的哈希值。如果获得的公开数据为比特币区块哈希值、哈希碰撞的值等数据,则在获得公开数据的同时直接获得了公开数据的哈希值,如果获得的公开数据为气象云图、A股指数等数据,则可以对公开数据进行哈希计算,获得公开数据的哈希值。
在本发明的一种具体实施方式中,可以对公开数据进行哈希计算,获得公开数据的哈希值。即无论获得的公开数据是否已经为哈希值,都可以利用预设的哈希算法对公开数据进行哈希计算,获得公开数据的哈希值。
哈希算法可以根据实际情况进行设定和调整,如设定为MD5、SHA-1、SHA-2、SHA-3或SHA-256等哈希算法。利用哈希算法对公开数据进行哈希计算,可以获得公开数据的一组16进制的哈希值。
举例而言,指定时间点为2018-11-29 08:33,该指定时间点可以是在2018-11-2908:33之前的任意一个时间点指定的。
获得的该指定时间点的公开数据为比特币区块哈希值Hash 160:c22b7ff24f16a758609daf5ee825b74d2f3868d9。同时可以将该组数值确定为该公开数据的哈希值。在该指定时间点之前,即在这一区块产生前,这个公开数据完全不可预测。
S130:基于哈希值,确定随机数种子。
获得指定时间点的公开数据,并获得公开数据的哈希值后,可以基于该哈希值,确定随机数种子。具体的,可以将该哈希值的部分或者全部确定为随机数种子。
S140:将随机数种子加入到预设的随机函数中,获得随机数。
在本发明实施例中,可以预先选定一个随机函数。该随机函数可以是标准开源随机函数。
确定出随机数种子后,可以将随机数种子加入到预设的随机函数中,通过随机函数的作用,获得随机数。
相同的随机数种子通过同一个随机函数的相同规则的作用,可以生成相同的随机数。所以,在指定时间点之后,如果要对基于该指定时间点的公开数据生成的随机数进行验证,则可以通过获取该指定时间点的公开数据,获得该公开数据的哈希值,基于该哈希值,确定随机数种子,利用该随机数与相同的随机函数获得的随机数进行验证,以确定随机数的公平公正性。
应用本发明实施例所提供的方法,获得指定时间点的公开数据后,获得公开数据的哈希值,基于哈希值,确定随机数种子,将获得的随机数种子加入到预设的随机函数中,获得随机数。指定时间点为在指定时间点之前预先指定的时间点,指定时间点的公开数据具有随时间随机的特性,在指定时间点之前,任何人都不可预测该指定时间点的公开数据,对指定时间点的公开数据进行哈希计算,得到哈希值,进而基于哈希值得到的随机数更加公开公正,而且,在指定时间点之后,所有人均可基于获得的指定时间点的公开数据,对随机数进行验证。
在本发明的一种具体实施方式中,步骤S130可以包括以下步骤:
将哈希值中设定位的数值确定为随机数种子。
在本发明实施例中,可以预先设定选取哪些位的数值确定为随机数种子,如设定选取后X位的数值,或者设定每隔2位选取一位的数值,共选取X个。获得公开数的哈希值后,可以将哈希值中设定位的数值确定为随机数种子。如将哈希值中后8位的数值确定为随机数种子。
将哈希值中设定位的数值确定为随机数种子,可以增强随机数种子的随机性。
在本发明的一种具体实施方式中,步骤S140可以包括以下步骤:
通过预设的随机函数对随机数种子取值N次,获得随机数,N为正整数。
在本发明实施例中,确定随机数种子后,可以通过预设的随机函数对随机数种子取值N次,获得随机数,N可以预先设定,为正整数。
例如,以上例的哈希值为例,取后8位的数值,得到2f3868d9,将此8位16进制数确定为随机数种子,采用ldd(Ubuntu EGLIBC 2.19-0ubuntu6.9)2.19版本。代码如下:
unsigned int seed=0x2f3868d9;
srand(seed);
long r1=rand()%10000000;
long r2=rand()%10000000;
这是一个标准的RANDOM随机函数,以“0x2f3868d9”作为随机数种子,针对范围从0~9999999的数值取值,取值2次,可得到1959471。该数值即为最后得到的随机数。
当然,通过随机函数可以取值多次,如取值3次可得到另一结果。
其他任意用户用相同的随机数种子,运行相同版本的随机函数,取值相同次数,得到的结果相同。
相应于上面的方法实施例,本发明实施例还提供了一种随机数获得装置,该装置包括存储器和处理器,存储器上存储有可在处理器上运行的随机数获得程序,随机数获得程序被处理器执行时实现如下方法:
获得指定时间点的公开数据,指定时间点为在指定时间点之前预先指定的时间点;
获得公开数据的哈希值;
基于哈希值,确定随机数种子;
将随机数种子加入到预设的随机函数中,获得随机数。
应用本发明实施例所提供的装置,获得指定时间点的公开数据后,获得公开数据的哈希值,基于哈希值,确定随机数种子,将获得的随机数种子加入到预设的随机函数中,获得随机数。指定时间点为在指定时间点之前预先指定的时间点,指定时间点的公开数据具有随时间随机的特性,在指定时间点之前,任何人都不可预测该指定时间点的公开数据,对指定时间点的公开数据进行哈希计算,得到哈希值,进而基于哈希值得到的随机数更加公开公正,而且,在指定时间点之后,所有人均可基于获得的指定时间点的公开数据,对随机数进行验证。
在本发明的一种具体实施方式中,随机数获得程序被处理器220执行时具体实现:
将哈希值中设定位的数值确定为随机数种子。
在本发明的一种具体实施方式中,随机数获得程序被处理器220执行时具体实现:
通过预设的随机函数对随机数种子取值N次,获得随机数,N为正整数。
在本发明的一种具体实施方式中,随机数获得程序被处理器220执行时具体实现:
对公开数据进行哈希计算,获得公开数据的哈希值。
在本发明的一种具体实施方式中,公开数据为比特币区块哈希值、哈希碰撞的值、气象云图或A股指数。
在本实施例中,随机数获得装置可以是PC(Personal Computer,个人电脑),也可以是智能手机、平板电脑、掌上电脑、便携计算机、智能路由器、矿机、网络存储设备、终端设备等。
参见图2所示,该随机数获得装置可以包括存储器11、处理器12和总线13。
其中,存储器11至少包括一种类型的可读存储介质,可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、磁性存储器、磁盘、光盘等。存储器11在一些实施例中可以是随机数获得装置的内部存储单元,例如该随机数获得装置的硬盘。存储器11在另一些实施例中也可以是随机数获得装置的外部存储设备,例如随机数获得装置上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,存储器11还可以既包括随机数获得装置的内部存储单元也包括外部存储设备。存储器11不仅可以用于存储安装于随机数获得装置的应用软件及各类数据,例如随机数获得程序的代码等,还可以用于暂时地存储已经输出或者将要输出的数据。
处理器12在一些实施例中可以是一中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器或其他数据处理芯片,用于运行存储器11中存储的程序代码或处理数据,例如执行随机数获得程序等。
该总线13可以是外设部件互连标准(peripheral component interconnect,简称PCI)总线或扩展工业标准结构(extended industry standard architecture,简称EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图2中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
进一步地,随机数获得装置还可以包括网络接口,网络接口可选的可以包括有线接口和/或无线接口(如WI-FI接口、蓝牙接口等),通常用于在该装置1与其他电子设备之间建立通信连接。
可选地,该随机数获得装置还可以包括用户接口,用户接口可以包括显示器(Display)、输入单元比如键盘(Keyboard),可选的用户接口还可以包括标准的有线接口、无线接口。可选地,在一些实施例中,显示器可以是LED显示器、液晶显示器、触控式液晶显示器以及OLED(Organic Light-Emitting Diode,有机发光二极管)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在随机数获得装置中处理的信息以及用于显示可视化的用户界面。
图2仅示出了具有组件11-13的随机数获得装置,本领域技术人员可以理解的是,图2示出的结构并不构成对随机数装置的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。
相应于上面的方法实施例,本发明实施例还提供了一种随机数获得系统,如图3所示,该系统包括:
公开数据获得单元310,用于获得指定时间点的公开数据,指定时间点为在指定时间点之前预先指定的时间点;
哈希值获得单元320,用于获得公开数据的哈希值;
随机数种子确定单元330,用于基于哈希值,确定随机数种子;
随机数获得单元340,用于将随机数种子加入到预设的随机函数中,获得随机数。
应用本发明实施例所提供的系统,获得指定时间点的公开数据后,获得公开数据的哈希值,基于哈希值,确定随机数种子,将获得的随机数种子加入到预设的随机函数中,获得随机数。指定时间点为在指定时间点之前预先指定的时间点,指定时间点的公开数据具有随时间随机的特性,在指定时间点之前,任何人都不可预测该指定时间点的公开数据,对指定时间点的公开数据进行哈希计算,得到哈希值,进而基于哈希值得到的随机数更加公开公正,而且,在指定时间点之后,所有人均可基于获得的指定时间点的公开数据,对随机数进行验证。
在本发明的一种具体实施方式中,随机数种子确定单元330,具体用于:
将哈希值中设定位的数值确定为随机数种子。
在本发明的一种具体实施方式中,随机数获得单元340,具体用于:
通过预设的随机函数对随机数种子取值N次,获得随机数,N为正整数。
在本发明的一种具体实施方式中,哈希值获得单元320,具体用于:
对公开数据进行哈希计算,获得公开数据的哈希值。
在本发明的一种具体实施方式中,公开数据为比特币区块哈希值、哈希碰撞的值、气象云图或A股指数。
相应于上面的方法实施例,本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有随机数获得程序,随机数获得程序可被一个或者多个处理器执行,以实现上述的随机数获得方法。
相应于上面的方法实施例,本发明实施例还提供了一种计算机程序产品,包括计算机指令,当其在计算机上运行时,使得计算机可以执行上述的随机数获得方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。
计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本发明实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid StateDisk(SSD))等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是,上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。并且本文中的术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。