我想创建128个由随机位组成的键。每个密钥必须大小= 128位。当我运行以下代码时,我注意到这个奇怪的输出:
CODE:
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?我该如何防止这种情况?
答案 0 :(得分:4)
随机位可以是0或1,所以当左边的位是0(一半的时间)时,仍然会产生数字但是长度<1。 128 这是非常逻辑的
答案 1 :(得分:3)
random
生成一个随机python,其长度为给定量。
random.getrandbits(k)的
返回一个带有k个随机位的python long int。 [...]
您使用的方法记录如下:
long.bit_length()
返回表示二进制整数所需的位数,不包括符号和前导零。
因此,较短的数字实际上是随机数,其中一些前导零不包括在计数中。
请注意,不建议使用random
来保护安全。
答案 2 :(得分:3)
旁注for i in range(1, 128)
只会给你127个密钥。使用for i in range(0, 128)
(我更愿意添加评论,没有足够的代表这样做)