#python #python-3.x #encryption #cryptography #rsa
#python #python-3.x #шифрование #криптография #rsa
Вопрос:
Я пытаюсь в base64 закодировать некоторые данные, зашифрованные RSA, но шифрование RSA возвращает кортеж, а для кодирования base64 требуется байтоподобный объект.
Файл «C:PATHAppDataLocalContinuumanaconda3libbase64.py «, строка 58, в b64encode encoded = binascii.b2a_base64(s, новая строка=False)
Ошибка типа: требуется байтоподобный объект, а не «кортеж»
Я ищу предложения, чтобы исправить это наилучшим образом.
from Crypto.Cipher import AES
from Crypto.PublicKey import RSA
def rsa_encrypt(data):
return pub_keyObj.encrypt(data, 32)
def rsa_encrypt_base64(data):
return base64.standard_b64encode(rsa_encrypt(data))
encrypted_data = aes_encode(data, key, iv) #AES encoding is working fine
print("EncryptedString: ", rsa_encrypt_base64(encrypted_data))
Комментарии:
1. каково содержимое этого кортежа?, можете ли вы опубликовать пример данных, ключа и iv?
2. Содержимое кортежа — это шифрование rsa и что-то «пустое», например (b’…..e x89, ‘ ,) , где …. представляет много в байтах.
3. данные могут быть строкой или чем-то еще, что я хочу зашифровать. для шифрования AES генерируется ключ и IV.. и эта часть отлично работает.
Ответ №1:
В этой строке return base64.standard_b64encode(rsa_encrypt(data))
добавьте индекс 0
, подобный этому:
return base64.standard_b64encode(rsa_encrypt(data)[0])
Это решит вашу проблему.
Проблема rsa_encrypt
в том, что will возвращает кортеж с двумя элементами. Первый элемент — это зашифрованный текст того же типа, что и открытый текст (строка или длинный). Второй элемент всегда равен None .
смотрите Здесь для получения дополнительной информации.
Комментарии:
1. вау, такой API …
"The second item is always None"
, теперь мне любопытно. Знаете ли вы, почему это всегдаNone
так?2. @Netwave, нет, мне тоже любопытно. :))