Как загрузить в 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/