为什么在Python中使用random时会发生这种情况?我怎样才能预防呢?

2024-04-25 09:55:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建128个由随机位组成的密钥。每个密钥的大小必须为128位。当我运行以下代码时,我注意到这个奇怪的输出:

代码:

for i in range(1, 128):
    key = random.getrandbits(128)
    print("Key:", key, key.bit_length())

输出:

Key: 171015864459493129154336425209795162216 128
Key: 265655405161066827301254922985896430579 128
Key: 149533773555250911787517288984005312306 127
Key: 67337979537475290133339561382641205404 126
Key: 309944504326722665064876901817102187588 128
Key: 5025567194209335595020257770351824725 122
Key: 311246876593534253598386348380900720669 128
etc

为什么有些键的长度小于128?我怎样才能防止这种情况?你知道吗


Tags: key代码inforbitetc密钥情况
3条回答

random生成一个具有给定数量的随机位的随机python long,正如docs所解释的。你知道吗

random.getrandbits(k)

Returns a python long int with k random bits. [...]

您使用的方法记录如下:

long.bit_length()

Return the number of bits necessary to represent an integer in binary, excluding the sign and leading zeros.

因此,较短的数字实际上是随机数,带有一些不包括在计数中的前导零。你知道吗

请注意,不鼓励出于安全目的使用random。你知道吗

作为旁注,for i in range(1, 128)只会给你127个键。用for i in range(0, 128)简单修复

(我更愿意添加评论,没有足够的代表这么做)

随机位可以是0或1,因此当左边的位为0(一半时间)时,仍将生成长度为<;128的数字 这很符合逻辑

相关问题 更多 >

    热门问题