В Python 3.x и связанных с криптографией RSA, как обновить значения словаря до логических значений? - PullRequest
0 голосов
/ 19 февраля 2019

Я перечислю требования и пример моего кода.Как исправить код?Проблема в том, что я не могу обновить значения dict.в логический формат. Может потребоваться, чтобы я прошел через все значения dict.проверить наличие True или False

Например, Initial: D = {"1": 2, "2": 3} Предназначено для вывода: D = {"1": True, "2": False}

Требования:

  • Входными данными должны быть словарь (D) и открытый ключ RSA в виде кортежа (e, N). Словарь должен содержать ключи в качестве сообщений и значения в качестве подписей.
  • Выходными данными должен быть словарь с ключами в качестве сообщений (такой же, как во вводе), но сзначения, выраженные как True или False, если подпись соответствует значениям открытого ключа .

    def Q1(D,key):
    e = key[0]
    N = key[1]
    
    for k,v in D.items():
        if (v ** key[0]) % key[1] == int(k) % key[1]:
            D[v] = True
        else:
            D[v] = False
    

Возвращает ошибку:

> <RuntimeError                              Traceback (most recent call
> last) <ipython-input-3-9cfd98926b81> in <module>
>       9             D[v] = False
>      10 
> ---> 11 Q6({"1":2,"2":3},(5,14))
> 
> <ipython-input-3-9cfd98926b81> in Q6(D, key)
>       3     N = key[1]
>       4 
> ----> 5     for k,v in D.items():
>       6         if (v ** key[0]) % key[1] == int(k) % key[1]:
>       7             D[v] = True
> 
> RuntimeError: dictionary changed size during iteration>

1 Ответ

0 голосов
/ 19 февраля 2019

Там написано словарь изменил размер , потому что вы используете v вместо k в качестве индекса, поэтому он добавляет больше пары в словарь и завершается ошибкой, измените на:

D[k] = True
...