首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python secrets模块操作可预测

Python secrets模块操作可预测
EN

Stack Overflow用户
提问于 2019-04-11 03:27:54
回答 1查看 115关注 0票数 -3

我在随机和秘密之间进行了研究,发现秘密是“加密安全的”。每个人都说堆栈溢出源是最接近真实随机的。所以我想用它来生成一个种群。然而,它并没有给出非常随机的结果,而是可预测的结果。

我测试的第一个特征是性别,确切地说是4个,并将其全部绘制出来……

代码语言:javascript
复制
# code may not function as it's typed on mobile without a computer to test on

import secrets
import multiprocessing


def gen(args*):
    gender = ["Male", "Female", "X", "XXY"]
    rng = secrets.choice(gender)
    return rng

with multiprocessing.Pool(processes=4) as pool:
    id_ = [I for I in range (2000000000)]
    Out = pool.map(gen, id_)
    # Do stuff with the data

当我通过其他函数处理数据时,这些函数确定了一个性别对另一个性别的百分比,它总是25 +- 1%。我希望偶尔有100%的1个性别和0个其他性别,但这从来没有发生过。

我也尝试了用随机数做同样的事情,它产生了类似的结果,但不知何故花费了两倍的时间。

我还将列表性别更改为X和XXY中的一个,同时拥有其他两个中的49个,并给出了1% X和1% XXY的可预测结果。

除了熵这个术语之外,我在计算机上没有太多使用RNG的经验……Python有没有本机或PYPI包可以产生熵或混沌数字?

secrets模块应该以某种可预测的方式运行吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-11 03:42:19

我想你可能把一些不同的想法混在一起了。

每次调用secrets.choice函数时,它都会随机选择您提供的4个性别选项中的1个,在您的示例中是2000000000次。在任何合理实现的随机性生成器中,在从4个选项的列表中随机选择2000000000次之后,获得任何选项的100%的可能性实际上为零。

如果我对你的问题理解正确的话,这实际上是一个非常有力的证据,证明secrets.choice函数的行为符合预期,并提供了一个均匀的选项分布。当你的N接近无穷大时,方差应该降到零。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55619991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档