2015-10-13 51 views
0

我想創建128個由隨機位組成的密鑰。每個密鑰的大小必須爲128位。當我運行下面的代碼,我注意到這個奇怪的輸出:爲什麼在隨機使用Python時發生這種情況?我怎樣才能防止它?

CODE:

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

OUTPUT:

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

爲什麼有些鍵具有長度小於128?我怎樣才能防止這一點?

回答

4

隨機比特可以是0或1,從而當在左邊的位是0(一半的時間)的數量將仍然產生,但是與長度這是非常邏輯

3

random生成正如文檔解釋的那樣,這是一個隨機的蟒蛇。

random.getrandbits(K)

返回蟒長整型具有k的隨機比特。 [...]

您所使用的方法進行了說明如下:

long.bit_length()

返回必要來表示二進制的整數的比特數,但不包括標誌和前導零。

因此,較短的數字實際上是具有一些前導零的隨機數,它們不包括在計數中。

請注意,出於安全目的而使用random是不鼓勵的。

3

作爲便箋for i in range(1, 128)將只會給你127個密鑰。與for i in range(0, 128)

簡單的解決方法(我寧願添加爲註釋,沒有足夠的代表這樣做)

+1

諷刺的是我現在可以發表評論 –

相關問題