RSA-шифрование списка Python

#python #list #rsa

#python #Список #rsa

Вопрос:

У меня возникают проблемы с шифрованием элемента списка Python по элементам. Каждый элемент этого списка представляет собой строку. Вот мой код:

 from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP

#### Generate the public and private keys ####
key = RSA.generate(1024, e=65537)
priv_key = key.exportKey("PEM")
public_key = key.publickey().exportKey("PEM")


#Let's get some information!!
firstName = input("Enter your First Name: ") 
lastName = input("Enter your Last Name: ") 
id = input("Enter your Personal ID: ") 

#list = [first_name, last_name, id]
list = ['Bob', 'Dylan', '15898']
listEncrypted = []

#Now let's encrypt the list with a public key
list_length = len(list)

for index in range(list_length-1):
    cipher = PKCS1_OAEP.new(public_key)
    ciphertext = cipher.encrypt(list[index])
    listEncrypted.append(ciphertext)
 

Ошибка, которую я получаю, это:

   File "C:Usersmoo.spyder-py3RSA.py", line 122, in <module>
  ciphertext = cipher.encrypt(list[index])

  File "C:Usersmooanaconda3libsite-packagesCryptoCipherPKCS1_OAEP.py", line 107, in encrypt
  modBits = Crypto.Util.number.size(self._key.n)

  AttributeError: 'bytes' object has no attribute 'n'
 

Как мне зашифровать список, используя ввод пользователя? Пожалуйста, помогите…

Комментарии:

1. Что такое counter_public_key ?

2. Опубликованный вами пример не соответствует ошибке — и в нем есть другие ошибки. Как насчет обновленного примера, который нам проще запускать? Нам не нужны подсказки для ввода и список, только одно зашифрованное строковое шифрование, которое завершается с тем же сбоем.

3. @mkrieger1 Я изменил имя. Спасибо, что указали на это

4. @tdelaney Я закомментировал предыдущий список и создал под ним новый. Спасибо

5. @Unn Знает ли PKCS1_OAEP.new(ключ), чтобы использовать открытый ключ для создания зашифрованного текста?

Ответ №1:

Криптографические ключи обычно генерируются один раз и сохраняются в файлах в одном из нескольких форматов. Также часто закрытый ключ дополнительно защищается паролем или хранится в безопасном месте в вашей файловой системе.

Для шифрования с помощью открытого ключа вы обычно получаете ключ из какого-либо внешнего источника, но для этого тестового кода мы используем сгенерированный нами тестовый ключ.

Я не уверен в криптографических версиях, но мой использует camelCase для имен методов, хотя lower_case используется в других примерах.

 from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP

#### Generate the public and private keys for test ####
key = RSA.generate(1024, e=65537)
priv_key = key.exportKey("PEM")
public_key = key.publickey().exportKey("PEM")

text = "This is secret"

#Now let's encrypt the list with a public key
key = RSA.importKey(public_key)
cipher = PKCS1_OAEP.new(key)
ciphertext = cipher.encrypt(text.encode("utf-8"))
print(text, ciphertext)