随机数在各行各业都有着广泛地应用需求!离咱最近的应用就是咱公众号的抽奖,每次抽奖都需要随机选择。实际上这里的随机数选择并不是真正意义上的随机数,而是通过数学方法产生的一种循环周期极长且能通过随机数检验的伪随机数,从技术上来讲这种随机数是可以通过一个定方法进行破解的。
今天给大家介绍一种获取真随机数的方法,是由澳大利亚国立大学物理与工程研究学院安全量子通信组基于测量真空的量子涨落数据来实时生成的,全世界任何人都可以通过互联网来获取该课题组产生的真实随机数。
下面就一起来看看如何获取吧!
他们提供两种方式获取真实随机数,一是通过下载生成好的真随机数库,二是通过互联网直接访问官方服务器来实时获取,咱这里就只介绍第二种。
在访问ANU Quantum Random Numbers Server需要提供三个API参数:
(1) 数据类型 (Data type):数据类型必须为'uint8' (返回0-255之间的整数)、'uint16'(返回0-65535之间的整数)或'hex16'(返回00-ff之间的十六进制字符)。
(2) 数组长度 (Array length):要返回的数组长度,必须在1–1024之间。
(3) 块大小 (Block size):仅对于“ hex16”数据类型需要。设置每个块的长度,必须在1–1024之间。
API调用格式:
https://qrng.anu.edu.au/API/jsonI.php?length=[array length]&type=[data type]&size=[block size]
realRandomNum源程序
% 感谢关注matlab爱好者公众号
% 本程序作者:bashan
%
% 开发者:Secure Quantum Communication group,The Australian National University
% API调用网站:https://qrng.anu.edu.au/API/jsonI.php?length=[array length]&type=[data type]&size=[block size]
%
clc;clear;
% 大小必须在1至1024之间
arrayLength = 3;
% 数据类型必须为 'uint8','uint16','hex16'
dataType = 'uint8';
% 只有数据类型为'hex16'时,blockSize参数才起作用
blockSize = 2;
web1 = 'http://qrng.anu.edu.au/API/jsonI.php?length=';
web2 = '&type=';
web3 = '&size=';
% 组合网址
qrngWeb = strcat(web1,num2str(arrayLength),...
web2,num2str(dataType),...
web3,num2str(blockSize));
% 使用webread访问ANU Quantum Random Numbers Server
randNum = webread(qrngWeb);
if randNum.success
disp(['获取的真随机数为:',num2str(randNum.data')])
else
disp('随机数获取失败!')
end
将以上代码块中的代码复制粘贴到matlab编辑器中保存运行即可获取基于量子测量的真随机数,当然前提是电脑必须联网,小伙伴可以根据自己的需要选择不同的数据类型和数据长度。经小编测试,所有的数据类型都能够正常运行,大家可以放心使用。从上面不难看出,生成的随机数值的范围是有限的,如果有小伙伴需要更大范围的数据,请直接在ANU Quantum Random Numbers Server联系安全量子通信组。
参考资料:
[1] http://qrng.anu.edu.au/index.php
[2] Appl. Phys. Lett. 98, 231103 (2011); https://doi.org/10.1063/1.3597793
[3] Phys. Rev. Applied 3, 054004 (2015); https://doi.org/10.1103/PhysRevApplied.3.054004