Tôi khuyên bạn nên M2Crypto thay vì python-crypto. Bạn sẽ cần M2Crypto để phân tích cú pháp PEM và EVP api của nó giải phóng mã của bạn từ tùy thuộc vào một thuật toán cụ thể.
private = """
-----BEGIN RSA PRIVATE KEY-----
MIIBOwIBAAJBANQNY7RD9BarYRsmMazM1hd7a+u3QeMPFZQ7Ic+BmmeWHvvVP4Yj
yu1t6vAut7mKkaDeKbT3yiGVUgAEUaWMXqECAwEAAQJAIHCz8h37N4ScZHThYJgt
oIYHKpZsg/oIyRaKw54GKxZq5f7YivcWoZ8j7IQ65lHVH3gmaqKOvqdAVVt5imKZ
KQIhAPPsr9i3FxU+Mac0pvQKhFVJUzAFfKiG3ulVUdHgAaw/AiEA3ozHKzfZWKxH
gs8v8ZQ/FnfI7DwYYhJC0YsXb6NSvR8CIHymwLo73mTxsogjBQqDcVrwLL3GoAyz
V6jf+/8HvXMbAiEAj1b3FVQEboOQD6WoyJ1mQO9n/xf50HjYhqRitOnp6ZsCIQDS
AvkvYKc6LG8IANmVv93g1dyKZvU/OQkAZepqHZB2MQ==
-----END RSA PRIVATE KEY-----
"""
message = "python-crypto sucks"
# Grab RSA parameters e, n
from M2Crypto import RSA, BIO
bio = BIO.MemoryBuffer(private)
rsa = RSA.load_key_bio(bio)
n, e = rsa.n, rsa.e
# In Python-crypto:
import Crypto.PublicKey.RSA
pycrypto_key = Crypto.PublicKey.RSA.construct((n, e))
# Use EVP api to sign message
from M2Crypto import EVP
key = EVP.load_key_string(private)
# if you need a different digest than the default 'sha1':
key.reset_context(md='sha256')
key.sign_init()
key.sign_update(message)
signature = key.sign_final()
# Use EVP api to verify signature
public = """
-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANQNY7RD9BarYRsmMazM1hd7a+u3QeMP
FZQ7Ic+BmmeWHvvVP4Yjyu1t6vAut7mKkaDeKbT3yiGVUgAEUaWMXqECAwEAAQ==
-----END PUBLIC KEY-----
"""
from M2Crypto import BIO, RSA, EVP
bio = BIO.MemoryBuffer(public)
rsa = RSA.load_pub_key_bio(bio)
pubkey = EVP.PKey()
pubkey.assign_rsa(rsa)
pubkey.reset_context(md="sha256")
pubkey.verify_init()
pubkey.verify_update(message)
assert pubkey.verify_final(signature) == 1
Xem http://svn.osafoundation.org/m2crypto/trunk/tests/test_rsa.py, nhưng tôi thích sử dụng các thuật toán độc lập EVP API http://svn.osafoundation.org/m2crypto/trunk/tests/test_evp.py.
How do you verify an RSA SHA1 signature in Python? giải quyết một vấn đề tương tự.
Vào tháng 7 năm 2014, [PEM Pack] (http://www.cryptopp.com/wiki/PEM_Pack) đã được thêm vào thư viện Crypto ++. Gói PEM là một phần thực hiện mã hóa thư cho phép bạn đọc và viết các khóa và tham số mã hóa PEM, bao gồm các khóa riêng được mã hóa. Các tệp bổ sung bao gồm hỗ trợ cho các khóa RSA, DSA, EC, ECDSA và các tham số Diffie-Hellman. Đó là một add-on cho thư viện, và không phải là một phần của thư viện phù hợp. Bạn tải xuống một tệp ZIP và thêm năm tệp nguồn vào thư viện. Sau đó, bạn xây dựng thư viện (Crypto ++ tự động chọn chúng). – jww
Liên quan: [Tải mã khóa RSA riêng được mã hóa PEM trong Crypto ++] (http://stackoverflow.com/questions/9815001/load-pem-encoded-private-rsa-key-in-crypto?rq=1) – jww