Как добавить оператор if-else без выполнения бесконечного цикла?

Как создать оператор 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, если операторы else для использования закрытых ключей не печатаются одинаково, а еще один - для открытого ключа?

2 ответа

Вы не убываете count в теле цикла. Итак, выражение count<5 остатки True навсегда.

В этом случае может быть проще использовать цикл for вместо цикла while.

for n in range(5)

Как написано,

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

Кстати, шансы того, что эти секретные ключи будут идентичны, должны быть очень, очень, очень малы. Если вы обычно получаете идентичные секретные ключи, в вашем криптографическом алгоритме есть проблема.

Другие вопросы по тегам