#python #encryption
Вопрос:
Я изучаю алгоритм RSA
шифрования и хочу использовать его в Python. Я использую pycryptodome
пакет, и оттуда я вижу, что есть две переменные закрытых ключей.
В чем разница между pubKey
и pubKeyPEM
, и какие из них мне нужно использовать для части шифрования?
Кроме того, зачем Decryptor
использовать оба ключа ( keyPair
) вместо закрытого ключа ( privKeyPEM
) ?
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
keyPair = RSA.generate(1024)
pubKey = keyPair.publickey()
pubKeyPEM = pubKey.exportKey()
privKeyPEM = keyPair.exportKey()
Encryptor = PKCS1_OAEP.new(pubKey)
Decryptor = PKCS1_OAEP.new(keyPair)
Ответ №1:
pubKey
это просто представление ключа, используемого Python. Он состоит из двух целых чисел: модуля и публичного показателя. Конечно, это может быть, например, также ссылка на ключ в аппаратном устройстве, где это применимо.
pubKeyPEM
это определенная кодировка открытого ключа в байтах или символах. Это SubjectPublicKeyInfo
структура в соответствии со спецификациями API. SubjectPublicKeyInfo
или SPKI-это двоичная структура, PEM-это броня ASCII вокруг нее, т. Е. Она определяет структуру, а затем кодирует двоичный файл с использованием базы 64. Он обычно используется, например, OpenSSL.
Для части шифрования, которая вам нужна pubKey
. Но вы, вероятно, сначала должны передать pubKey
их отправителю или, возможно, вам придется сохранить pubKey
их в БД или файловой системе. Вот где появляется функциональность экспорта.
Закрытый ключ обычно содержит открытый ключ (как поле открытого показателя), или его легко вычислить по закрытому ключу (в случае ключа с эллиптической кривой). Так что вы можете с таким же успехом думать о закрытом ключе как о паре ключей. Это зависит от библиотеки, могут ли эти понятия использоваться взаимозаменяемо.
Комментарии:
1. PS обратите внимание, что функция экспорта принимает
pkcs=1
в качестве параметра по умолчанию, а затем экспортирует идентификатор subjectPublicKey. Это немного иронично, поскольку PKCS#1 указывает другой формат открытого ключа с меньшим количеством информации; SPKI содержит открытый ключ в формате PKCS#1, но они не совместимы напрямую. Это ошибка в дизайне API, если вы спросите меня.