2017-05-16 52 views
-1

如何創建if else語句以確保privatekey不會被打印得一樣?我想確保生成的密鑰不相同。它只是一個預防措施。但是當我把if-else語句放在代碼中時,它會運行一個無限循環。我需要至少打印五次按鍵。我怎樣才能解決這個問題?我真的很感謝這段代碼的任何幫助!從https://github.com/truh/CryptoFun獲得這些代碼。如何在不運行無限循環的情況下添加if-else語句?

e.g 
if box.sk == box.sk: 
    generatekeys() 

else: 
    print("Success!") 

我在哪裏把if else語句放在下面的代碼中,以便它不會運行無限循環?

def generatekeys(): 

count = 0 
while (count<5): 

    import libnacl.public 
    import libnacl.secret 
    import libnacl.utils 

    msg = b'But then of course African swallows are not migratory.' 
    # This methods creates a keypar(public,private) for the Clients 

    alice = libnacl.public.SecretKey() 


    alice_box = libnacl.public.Box(alice.sk, alice.pk) 


    box = libnacl.secret.SecretBox() 
    print(box.sk) 


    alice_ctxt = alice_box.encrypt(box.sk) 
    print(alice_ctxt) 


    aclear = alice_box.decrypt(alice_ctxt) 
    print(aclear) 

    # Alice encrypts a message with the shared key and send it to Bob 
    encr = box.encrypt(msg) 
    print(encr) 

    box2 = libnacl.secret.SecretBox(aclear) 
    decr= box2.decrypt(encr) 
    print(decr) 


    generatekeys() 

我打算只使用愛麗絲,所以我沒有4個鍵。我只需要一個祕密(私人)密鑰和公鑰。我如何創建2如果其他語句使用私鑰不打印相同和另一個公鑰的私鑰?

+0

如果它們生成正確,它們將不會相同。相信我。 –

回答

0

書面,

if box.sk == box.sk: 
    generatekeys() 

總會引起generatekeys內的無限循環()。這是因爲bok.sk總是等於自己。在這段代碼中,你擔心哪兩個鍵是相同的?也許你的意思是這樣的:

bob = libnacl.public.SecretKey() 
alice = libnacl.public.SecretKey() 
if bob.sk == alice.sk: 
     generatekeys() 
else: 
     count++ 
     ...the rest of your code 

順便說一句,這些密鑰相同的機會應該是非常非常非常小。如果您通常獲得相同的密鑰,則您的加密算法存在問題。

+0

嗨!謝謝你的回覆!我編輯了我的代碼並使其更加具體。你認爲你可以幫忙嗎? – lmao

+0

我已經更新了我的答案。如果你想退出while循環,你需要count> = 5。 –

1

您不會在循環的主體中遞減count。所以表達式count<5永遠保持True

在這個用例中,使用for循環代替while循環會更容易。

for n in range(5) 
+0

HI! Thankyou爲你的快速回復,我嘗試了for循環,它沒有for循環,但當我添加if-else語句時,它進入了一個無限循環。我上面編輯了我的代碼,感謝幫助! – lmao

相關問題