Theo như tôi hiểu, tôi sẽ có thể sử dụng RSA để đảm bảo tính xác thực hoặc quyền riêng tư, như tôi muốn. Trong trường hợp của tôi, tôi muốn đảm bảo tính xác thực để tôi mã hóa dữ liệu bằng khóa riêng và cho phép bất kỳ ai giải mã nó bằng khóa công cộng. Dữ liệu không thực sự bí mật nhưng tôi cần đảm bảo rằng nó được tạo bởi chủ sở hữu của khóa công khai (và riêng tư).Giải mã bằng khóa công cộng RSA với PyCrypto
Khi tôi cố gắng giải mã bằng PyCrypto, tôi nhận được Không có khóa riêng tư lỗi từ PyCrypto. Mã này là:
def _decrypt_rsa(decrypt_key_file, cipher_text):
from Crypto.PublicKey import RSA
from base64 import b64decode
key = open(decrypt_key_file, "r").read()
rsakey = RSA.importKey(key)
raw_cipher_data = b64decode(cipher_text)
decrypted = rsakey.decrypt(raw_cipher_data)
return decrypted
Tôi đang gọi nó bằng đường dẫn đến tệp khóa công khai (ở định dạng OpenSSH.) Dữ liệu được mã hóa không được tạo bởi tôi và không được thực hiện bằng Python nhưng PHP. Trong PHP có một hàm openssl_public_decrypt
giải mã dữ liệu này dễ dàng.
Hoàn toàn có thể giải mã bằng khóa công khai với PyCrypto không?
Bạn đã hoàn tác. Khóa công khai được sử dụng để mã hóa và khóa riêng được sử dụng để giải mã. – jchysk
Giải mã công khai giống như mã hóa. Vấn đề của bạn có thể được sửa theo cách này: 'decrypted = rsakey.encrypt (raw_cipher_data, 0)' – Helio
Nếu nguồn thực sự đã được mã hóa bằng khóa riêng, thì chúng đã ký hiệu quả dữ liệu. Một số công cụ, như Java, cho phép bạn làm điều này. Để giải mã chữ ký, bạn có thể sử dụng khóa công khai (hoặc phần công khai của khóa riêng). Xem: https://stackoverflow.com/questions/48280670/pycrypto-how-to-view-raw-rsa-signature-data –