كيفية استيراد PKCS # 8 RSA PIRTKEY (التي أنشأتها Openssl) في C #
-
19-09-2019 - |
سؤال
أحاول إيجاد طريقة لقراءة مفتاح خاص تم إنشاؤه باستخدام Openssl PKCS # 8 RSA في C # دون استخدام مكتبة خارجية.
هل يعرف شخص ما كيف يمكنني القيام بذلك؟
المحلول
أسهل طريقة للقيام بذلك مع مكتبة خارجية، تستخدم (مجانا) مكون رئيسي في Chillkat / الخاص: استخدام ذلك، يمكن إجراء استيراد المفتاح باستخدام فقط بضعة خطوط من التعليمات البرمجية وإذا كنت على استعداد لدفع 149 دولارا أو نحو ذلك لبقية المكتبة، فسوف يتعامل مع مفاهيم التشفير العامة أسهل كثيرا أيضا.
وعلى عكس Microsoft .NET Framework العادية، مشروع أحادي هل يبدو أن يكون لديك PKCS8 التنفيذ التي المصدر الكامل C # متاح. قد تكون هذه مناسبة كنقطة انطلاق في حال لم تتمكن من الاعتماد على المكتبات الخارجية، وتحمل ترخيص (lgpl 2.0) المرتبط بأعمال رمز أحادي لك ...
وأخيرا، فإن PKCS # 8 تنسيق ليس من الصعب للغاية التحليل، وكائنات زوج RSA / DSA الرئيسية هي حسب PKCS # 11. ومن السهل نسبيا التحويل إلى .NET X509Certificate بمجرد اكتشاف أين تذهب جميع البتات - أنا فعلا فعلت هذا في vb.net منذ فترة، ولكن للأسف غير قادر على مشاركة هذا الرمز.
نصائح أخرى
شكرا لإجابتك.
نصي لإنشاء مفتاح RSA استخدمت Openssl Whit:
(برنامج نصي لينكس)
openssl genrsa -out ${NAME}_openssl.key 2048
openssl pkcs8 -topk8 -in ${NAME}_openssl.key -nocrypt > ${NAME}.key
openssl req -new -x509 -key ${NAME}.key -out ${NAME}.crt -outform DER
في C # نحتاج إلى PIRTKEY بتنسيق XML. انا إستعملت هذه محلل للقيام بذلك.
لفك تشفير التحدي نحن بحاجة إلى استخدام:
byte[] challange = server.getChallenge();
RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider();
rsaProvider.FromXmlString(Demo.Properties.Resources.XmlPrivateKey);
byte[] plaintext = rsaProvider.Decrypt(challange, false);
لتشفير شهادة خادم Whit، نحتاج إلى استخدامها:
RSACryptoServiceProvider rsaProvider = x509.PublicKey.Key as RSACryptoServiceProvider;
byte[] answer = RsaProvider.Encrypt(plaintext, false);
شكرا للاستشارات JaVascience