#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)