Как загрузить в Python-RSA открытый ключ RSA из файла, сгенерированного с помощью openssl?

Я создал закрытый и открытый ключи со следующими командами:

openssl genrsa -out private_key.pem 512
openssl rsa -in private_key.pem -pubout -out public_key.pem

затем я попытался загрузить их с помощью скрипта python, используя Python-RSA:

import os
import rsa

with open('private_key.pem') as privatefile:
    keydata = privatefile.read()
privkey = rsa.PrivateKey.load_pkcs1(keydata,'PEM')

with open('public_key.pem') as publicfile:
    pkeydata = publicfile.read()

pubkey = rsa.PublicKey.load_pkcs1(pkeydata)

random_text = os.urandom(8)

#Generate signature
signature = rsa.sign(random_text, privkey, 'MD5')
print signature

#Verify token
try:
    rsa.verify(random_text, signature, pubkey)
except:
    print "Verification failed"

мой скрипт python терпит неудачу при попытке загрузить открытый ключ:

ValueError: No PEM start marker "-----BEGIN RSA PUBLIC KEY-----" found

3 ответов


Python-RSA использует формат PEM RSAPublicKey, а формат PEM RSAPublicKey использует строки верхнего и нижнего колонтитулов: в OpenSSL Примечания

- - - - - - НАЧАТЬ ОТКРЫТЫЙ КЛЮЧ RSA----- ----- КОНЕЦ ОТКРЫТОГО КЛЮЧА RSA - - - - -

вывод публичной части закрытого ключа в формате RSAPublicKey: в OpenSSL примеры

 openssl rsa -in key.pem -RSAPublicKey_out -out pubkey.pem

Если на Python3, вам также нужно открыть ключ в двоичном режиме, e.g:

with open('private_key.pem', 'rb') as privatefile:

вы можете создать закрытый ключ по ssh-keygen:

ssh-keygen -t rsa

и генерировать открытый ключ следующим образом:

ssh-keygen -e -m pem -f xxx > pubkey.pem

http://blog.oddbit.com/2011/05/08/converting-openssh-public-keys/