如何在不运行无限循环的情况下添加if-else语句?

时间:2017-05-16 01:33:34

标签: python-3.x loops if-statement cryptography curve-25519

如何创建if else语句以确保私钥不会被打印出来?我想确保生成的密钥不一样。这只是一个预防措施。但是当我在代码中放入if-else语句时,它会运行无限循环。我需要至少打印5次键。我怎样才能解决这个问题?我非常感谢您对此代码的任何帮助!从https://github.com/truh/CryptoFun获得了这些代码。

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个if else语句以使用私钥不打印相同而另一个用于公钥?

2 个答案:

答案 0 :(得分:1)

你没有在循环体中递减count。所以表达式count<5永远保持True

在这个用例中,使用for循环而不是while循环可能更容易。

for n in range(5)

答案 1 :(得分: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

顺便说一句,这些秘密密钥相同的机会应该是非常非常非常小的。如果您通常获得相同的密钥,则加密算法会出现问题。