Anu Quantum随机数服务器的Python接口

quantumrandom的Python项目详细描述


这个项目提供了与anu量子随机相互作用的工具。 数字生成器(qrng.anu.edu.au)。它 与他们的json api通信并提供qrandom命令行 工具、python api和linux /dev/qrandom字符设备。

QuantumRandom在Python2和3上工作。

注意

从版本1.7开始,quantumrandom现在默认使用ssl/tls。

安装

pip install quantumrandom

命令行工具

$ qrandom --int --min 5 --max 15
7
$ qrandom --binary
���I�%��e(�1��c��Ee�4�������j�Կ��=�^H�c�u
oq��G��Z�^���fK�0_��h��s�b��AE=�rR~���(�^Q�)4��{c�������X{f��a�Bk�N%#W
+a�a̙�IB�,S�!ꀔd�2H~�X�Z����R��.f
...
$ qrandom --hex
1dc59fde43b5045120453186d45653dd455bd8e6fc7d8c591f0018fa9261ab2835eb210e8
e267cf35a54c02ce2a93b3ec448c4c7aa84fdedb61c7b0d87c9e7acf8e9fdadc8d68bcaa5a
...
$ qrandom --binary | dd of=data
^C1752+0 records in
1752+0 records out
897024 bytes (897 kB) copied, 77.7588 s, 11.5 kB/s

创建/dev/qrandom

QuantumRandom在 用户空间。从中读取时,此设备会激发一堆线程来 获取数据。你不仅可以利用这个作为rng,还可以 这些数据返回到系统的熵池中。

为了构建它的依赖项,您需要以下包 已安装:svn gcc-c++fuse-devel gccxml libattr-devel。戴着17号软呢帽 更新的,您还需要为 CUSE模块。

注意

/dev/qrandom字符设备当前仅支持python2

pip install ctypeslib hg+https://cusepy.googlecode.com/hg
sudo modprobe cuse
sudo chmod 666 /dev/cuse
qrandom-dev
sudo chmod 666 /dev/qrandom

默认情况下,它将使用3个线程,可以通过向qrandom-dev中传递“-t”来更改这些线程。

检验FIPS 140-2合规性的随机性

$ cat /dev/qrandom | rngtest --blockcount=1000
rngtest: bits received from input: 20000032
rngtest: FIPS 140-2 successes: 1000
rngtest: FIPS 140-2 failures: 0
rngtest: FIPS 140-2(2001-10-10) Monobit: 0
rngtest: FIPS 140-2(2001-10-10) Poker: 0
rngtest: FIPS 140-2(2001-10-10) Runs: 0
rngtest: FIPS 140-2(2001-10-10) Long run: 0
rngtest: FIPS 140-2(2001-10-10) Continuous run: 0
rngtest: input channel speed: (min=17.696; avg=386.711; max=4882812.500)Kibits/s
rngtest: FIPS tests speed: (min=10.949; avg=94.538; max=161.640)Mibits/s
rngtest: Program run time: 50708319 microseconds

为Linux随机数生成器添加熵

sudo rngd --rng-device=/dev/qrandom --random-device=/dev/random --timeout=5 --foreground

监测可用的熵水平

watch -n 1 cat /proc/sys/kernel/random/entropy_avail

python api

quantumrandom python模块包含一个低级的get_data 函数,在anu量子随机数之后建模 生成器的json api。它返回任意一个的可变长度列表 uint16hex16数据。

>>> quantumrandom.get_data()
[26646]
>>> quantumrandom.get_data(data_type='uint16', array_length=5)
[42796, 32457, 9242, 11316, 21078]
>>> quantumrandom.get_data(data_type='hex16', array_length=5, block_size=2)
['f1d5', '0eb3', '1119', '7cfd', '64ce']

有效的data_type值是uint16hex16,并且 array_lengthblock_size不能大于1024。如果对某些人来说 API调用不成功或数据量不正确的原因是 从服务器返回,此函数将引发异常。

基于这个get_data函数,quantumrandom还提供了一组 更高级的帮助函数,使执行各种 任务。

>>> quantumrandom.randint(0, 20)
5
>>> quantumrandom.hex()[:10]
'8272613343'
>>> quantumrandom.binary()[0]
'\xa5'
>>> len(quantumrandom.binary())
10000
>>> quantumrandom.uint16()
numpy.array([24094, 13944, 22109, 22908, 34878, 33797, 47221, 21485, 37930, ...], dtype=numpy.uint16)
>>> quantumrandom.uint16().data[:10]
'\x87\x7fY.\xcc\xab\xea\r\x1c`'

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
编译器构造为什么在Java中允许初始化对Null的引用?   java手动调用javax的actionPerformed。摆动计时器   使用git分支的java Maven版本控制   Java8句子流   java JPA OneToOne和OneToMany实体实例化/创建   java如何将值添加到列表<Map<String,Object>>?   java如何使用ComboBox在一个框架内更改JPanel。getSelectedIndex()   java在比较XML和xmlunit时忽略文本差异   java无法从其他pc连接到本地主机   Java中分配对象id的优雅方式   Java中静态变量的使用   java试图从Neteller获取OAuth访问令牌时产生错误:“服务器返回HTTP响应代码:401表示URL”   Java:基元类型是否会影响性能?   java可以让hasNext()不区分大小写吗?   基于AutoCompleteTextView建议属性或AutoCompleteTextView值的java Android搜索   java流文件到firefox浏览器有时无法打开应用程序对话框   在没有ArrayList的Java中返回数组中的搜索结果   复制java。木卫一。IOException:数据错误(CRC)   java为什么我在尝试删除Facebook测试用户时会出现“方法未实现”错误   java如何使用JNA调用SetProcessReliationPolicy