تشفير Python غير المتماثل: استخدام مفاتيح PRV/Pub التي تم إنشاؤها مسبقًا
-
27-09-2019 - |
سؤال
حسنًا ، أولاً ، لقد بحثت في Google و Stackoverflow وقمت ببعض القراءة (أكثر من 4 ساعات فقط في هذا الجلوس) لم أجد ما أحتاجه لهذه الأسباب:
يقترح الكثير منهم مجرد إطلاق exe مثل gpg.exe (http://stackoverflow.com/questions/1020320)
اقترح البعض استخدام pycrypto أو المكتبات الأخرى والنظر إليها ، إما أ) لا يمكنني العثور على كيفية استخدام أي من واجهة برمجة التطبيقات الخاصة بهم ، ب) لا يمكنني العثور على كيفية استيراد مفتاح prv/pub موجود مسبقًا أو ج) استخدم Randompool غير الآمن (وأنا أحاول تحديثه ، إنه مجرد طلب مشكلة)
يذكر البعض ذلك في المرور ، لكنني لم أتمكن من العثور على ما يربطون به (أو لم يكن أي رابط على الإطلاق.
لذلك أعلم أن أسألك من مستخدمي Stackoverflow ، كيف يمكنني القيام بذلك ، وأخذ سلسلة من المفاتيح العامة (أو المسار (يمكنني فقط كتابته إلى ملف مؤقت ، (أخطط فقط للحصول عليه كأسلوب pub_key = ".. . "))) واستخدمها للتوقيع وتأمين سلسلة (سيتم نشرها في منتدى (JSON لتحديث طلبي)؟
أيضا هذه هي مفاتيح RSA (المعجون Gen 4096 بت SSH-2-RSA) التي يتم إنشاؤها باستخدام المعجون (يمكن أن يكون بأي شكل (OpenSsh ، Ssh.com ، PPK)
هذا ما يبدو عليه المفتاح العام
---- ابدأ SSH2 المفتاح العمومي ----
تعليق: "RSA-Key-20101003"
AAAAB3NzaC1yc2EAAAABJQAAAgEAi+91fFsxZ7k1UuudSe5gZoavwARUyZScCtdf WQ0ROoJC+XIqW5vVJfgmr+A1jLS5m4wNsrCqeyoX2B22T6iEwqVXrXt3QcbccKMu WkLKFK1h67q6Coc+3eOTmKrOuZbWc19YQgybdkR/GxF7XAbq4NCGNaCDtMOqX8Q2 L/a9fAYqVdTwg9trpcz3whNmdLk/B0edOABKuVX51UdLV+ZggK503+uAb1JiIIj0 mARwR/HNo4oRLMLf2PjuZsGVYYjJDdVJBU6AN4PUQSRRRPL4+YmsrLJb/TpfJeXA vj4KZMNJv15YXz7/iMZMKznDtr2RJX5wbSpuTUBNZveA7YiIHxvvvis38b/lX9SJ SYPfZ9CeQY6MvQgG2zwDTOOvKgOIB4sTGMXfcoxB8AF/QXOcxWFJkZoj36rvMd9n Po6szLjHXwcEUOUvvQfG4VvdQA0H5gGLHqYL1EehRsgi5qcCoFPaZW2K09ErKcS0 MbrLFjBkQ9KmqAM38bvM8UhCWAMA9VXOGHMxUHBV4Bir9alGS4VX0B8Y0b3dZ+7I MKkHMCwdEUJf7QVdGxGuSQtVsq8RZbIpk3g7wtv8f6I/iEC58ekdrH35tq5+1ilW dkk9+rrhUy4qrZ+ hfi7aeemybpiumbiumbsnebvnkmaipaoo23v8c9bq0iuxx4gizf10 o+tpsk8 =
---- نهاية SSH2 المفتاح العمومي ----
ليس هذا -> يبدو أن التنسيق الرئيسي هو PKCS1 حتى لا يعمل M2Crypto (تتوقع وظيفة مفتاح التحميل PEM)
أحدث قراءة أعتقد أنها تنسيق ملف مفتاح SSH العمومي (RFC: http://www.ietf.org/rfc/rfc4716.txt )
أعتقد أيضًا أنه خطأ أدناه ، لا أعتقد أنه يتعامل مع تنسيق ملف المفتاح العام SSH :(
يبدو أيضًا أن Twisted قد يكون المكان الذي يجب أن أنظر إليه
أيضا لماذا لا يسمح لي بنشر مكافأة على الفور ؟؟
المحلول
حسنًا ، لقد وجدت كيفية تحميله
from twisted.conch.ssh import keys as Keys
import base64
public_key = """\
---- BEGIN SSH2 PUBLIC KEY ----
Comment: "rsa-key-20101003"
AAAAB3NzaC1yc2EAAAABJQAAAgEAi+91fFsxZ7k1UuudSe5gZoavwARUyZScCtdf
WQ0ROoJC+XIqW5vVJfgmr+A1jLS5m4wNsrCqeyoX2B22T6iEwqVXrXt3QcbccKMu
WkLKFK1h67q6Coc+3eOTmKrOuZbWc19YQgybdkR/GxF7XAbq4NCGNaCDtMOqX8Q2
L/a9fAYqVdTwg9trpcz3whNmdLk/B0edOABKuVX51UdLV+ZggK503+uAb1JiIIj0
mARwR/HNo4oRLMLf2PjuZsGVYYjJDdVJBU6AN4PUQSRRRPL4+YmsrLJb/TpfJeXA
vj4KZMNJv15YXz7/iMZMKznDtr2RJX5wbSpuTUBNZveA7YiIHxvvvis38b/lX9SJ
SYPfZ9CeQY6MvQgG2zwDTOOvKgOIB4sTGMXfcoxB8AF/QXOcxWFJkZoj36rvMd9n
Po6szLjHXwcEUOUvvQfG4VvdQA0H5gGLHqYL1EehRsgi5qcCoFPaZW2K09ErKcS0
MbrLFjBkQ9KmqAM38bvM8UhCWAMA9VXOGHMxUHBV4Bir9alGS4VX0B8Y0b3dZ+7I
MKkHMCwdEUJf7QVdGxGuSQtVsq8RZbIpk3g7wtv8f6I/iEC58ekdrH35tq5+1ilW
dkk9+rrhUy4qrZ+HFi7AeemybpiumbSnebvnkMaIPAOo23V8C9BQ0iuxx4gIZf10
o+TPSK8=
---- END SSH2 PUBLIC KEY ----"""
key_data = ''.join(public_key.splitlines()[2:-1])# remove begin, end tags and comment
blob = base64.decodestring(key_data)
key = Keys.Key._fromString_BLOB(blob)
نصائح أخرى
يمكنني التفكير في خيارين بسيطين نسبيًا على الأقل
- استخدام openssl (أو pyopenssl) لتحويل BER إلى PEM
- استخدم paramiko أو twisted أو أي تطبيق python ssh آخر للعمل مع المفاتيح مباشرة