Несовместимость RSA-шифра - скрипт Python не может расшифровать ключ, зашифрованный скриптом bash - PullRequest
0 голосов
/ 05 февраля 2019

Я написал скрипт на python, который реализует шифрование и дешифрование.Для отправки ключа для зашифрованных данных получателю программа использует шифрование и дешифрование открытого ключа RSA на случайно сгенерированном ключе.

Ниже приведены методы шифрования и дешифрования в скрипте Python, которые я использовал для шифрования и дешифрования ключа с помощью открытых / закрытых ключей:

from Crypto.Cipher import PKCS1_OAEP

def encrypt_public_key(msg, public_key):
    cipher = PKCS1_OAEP.new(public_key)
    return cipher.encrypt(msg)

def decrypt_private_key(msg, private_key):
    cipher = PKCS1_OAEP.new(private_key)
    return cipher.decrypt(msg)

Моя программа должна взаимодействовать с программой одноклассников,однако этот человек написал свою программу как bash-скрипт, используя следующую команду для шифрования и дешифрования:

openssl rsautl -encrypt -inkey id_rsa.pub.pem -pubin -in key.bin -out key.bin.enc
openssl rsautl -decrypt -inkey id_rsa.pem -in key.bin.enc -out key.bin 

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

File "[script-path]", line 54, in decrypt_private_key
return cipher.decrypt(msg)
File "C:\[path_to_python]\Python37-32\lib\site-packages\Crypto\Cipher\PKCS1_OAEP.py", line 167, in decrypt
    raise ValueError("Ciphertext with incorrect length.")
ValueError: Ciphertext with incorrect length.

Я полагаю, что это означает, что наши сценарии не используют один и тот же шифр, я прав с этим предположением?Однако я не могу найти, какой шифр используется для сценария bash (и мой одноклассник тоже не знает), и я пытаюсь найти способ использовать другой шифр с модулем Python Crypto.

Я пыталсяпереключите мои методы шифрования и дешифрования на что-то похожее на это:

from Crypto.PublicKey import RSA

def encrypt_public_key(msg, public_key):
    return public_key.encrypt(msg, 32)
def decrypt_private_key(msg, private_key):
    return private_key.decrypt(msg)

Но это дает мне следующую ошибку:

File "[script_path]", line 52, in decrypt_private_key
    return private_key.decrypt(msg)
  File "[python-path]\Python37-32\lib\site-packages\Crypto\PublicKey\RSA.py", line 378, in decrypt
    raise NotImplementedError("Use module Crypto.Cipher.PKCS1_OAEP instead")
NotImplementedError: Use module Crypto.Cipher.PKCS1_OAEP instead

Какой шифр (PKCS1_OAEP) не работает сзашифрованный ключ от моего одноклассника.

Есть ли у вас какие-либо предложения о том, что я могу сделать, чтобы решить эту проблему?Проблема в том, что мы используем разные шифры и есть ли способ переключить мой шифр или мне нужно переключиться с моего модуля Python Crypto?

1 Ответ

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

Возможно, вы используете разные схемы заполнения RSA.Возможно, ваш одноклассник может попытаться использовать опцию rsautl OAEP -oaep.

Кажется, что по умолчанию режим заполнения для openssl rsautl равен -pkcs (PKCS # 1 v1.5).

Так что в качестве альтернативы вы можете попробовать:

from Crypto.Cipher import PKCS1_v1_5
...