كيف يمكنني استخدام مفتاح النقطة التي تم إنشاؤها من Win32 CryptoAPI في بلدي .صافي التطبيق ؟

StackOverflow https://stackoverflow.com/questions/49211

سؤال

يجب تطبيق موجود هو مكتوب في C++ ويندوز.يستخدم هذا التطبيق Win32 CryptoAPI لتوليد TripleDES الدورة مفتاح تشفير/فك تشفير البيانات.نحن باستخدام داعية خدعة واحدة تصدير مفتاح جلسة عمل بها باعتبارها النقطة التي يسمح النقطة أن يتم تخزينها في مكان ما في فك الشكل.

السؤال هو كيف يمكننا استخدام هذا في منطقتنا .NET (C#).إطار بتغليف/يلتف كثيرا ما CryptoAPI يقوم به.جزء من المشكلة هو CryptAPI أن TripleDES خوارزمية مايكروسوفت موفر التشفير المحسن هو 168 بت (3 مفاتيح 56 بت).ومع ذلك،.NET framework الدول مفاتيح 192 بت (3 مفاتيح 64 بت).على ما يبدو ، 3 بايت إضافية في .NET framework هو التكافؤ?

على أي حال, نحن بحاجة إلى قراءة المفتاح جزء من النقطة بطريقة أو بأخرى تكون قادرة على استخدام هذا في منطقتنا .صافي التطبيق.حاليا نحن لا نحصل على النتائج المتوقعة عند محاولة استخدام المفتاح .صافي.فك التشفير هو فشل فشلا ذريعا.أي مساعدة سيكون موضع تقدير كبير.

تحديث:

لقد تم العمل على الطرق لحل هذا و قد حان حتى مع حل سوف المنصب في الوقت المناسب.ولكن لا يزال سوف نقدر أي ردود فعل من الآخرين.

هل كانت مفيدة؟

المحلول

مقدمة

أنا أخيرا حول نشر الحل.أتمنى أن يقدم بعض المساعدة للآخرين هناك التي يمكن أن تفعل نفس النوع من الأشياء.هناك في الحقيقة ليست الكثير إشارة إلى القيام بذلك في أي مكان آخر.

الشروط

من أجل الكثير من هذا إلى معنى من الضروري قراءة داعية خدعة واحدة, الذي يسمح لك تصدير مفتاح جلسة إلى النقطة (المعروفة بايت هيكل).واحد يمكن أن تفعل بعد ذلك ما يحلو لهم مع هذا البايت دفق ، لكنه يحمل كل مهمة رئيسية.

وثائق MSDN هو مربكة

في هذا المثال, أنا باستخدام مايكروسوفت موفر التشفير المحسن, مع الثلاثي DES (CALG_3DES) الخوارزمية.الشيء الأول الذي رمى لي للحلقة حقيقة أن طول المفتاح هو المدرجة في 168 بت مع كتلة طول 64 بت.كيف يمكن أن طول المفتاح يكون 168?ثلاثة مفاتيح من 56 بت ؟ ماذا يحدث أخرى بايت?

حتى مع أن المعلومات بدأت في قراءة أخرى كيف البايت الأخير هو حقا التكافؤ لأي سبب من الأسباب CryptoAPI شرائط قبالة.هو الحال فعلا ؟ يبدو نوع من الجنون أنها سوف تفعل ذلك, لكن لا بأس.

الاستهلاك الرئيسية في .صافي

باستخدام TripleDESCryptoServiceProvider, لاحظت ملاحظات في مستندات إلى أن:

هذه الخوارزمية يدعم أطوال الرئيسية من 128 بت 192 بت في الزيادات من 64 بت.

حتى إذا CryptoAPI لديه مفتاح أطوال 168, كيف يمكنني الحصول على هذا ؟ صافي الذي يدعم يدعم فقط مضاعفات 64?لذلك،.صافي جانب API يأخذ التكافؤ في الاعتبار ، حيث CryptoAPI لا.كما يمكن للمرء أن يتصور... الخلط كان.

حتى مع كل هذا أنا في محاولة لمعرفة كيفية إعادة بناء مفتاح على .صافي الجانب السليم التكافؤ المعلومات.قابلة للتنفيذ ، ولكن ليس ممتعة جدا...دعونا نترك الامر عند هذا.مرة واحدة حصلت على كل هذا في مكان كل شيء انتهى إلى الفشل مع رأس المال F.

ما زلت معي ؟ جيد, لأنني سقطت بلدي الحصان مرة أخرى.

المصابيح الكهربائية والألعاب النارية

انخفاض وها أنا تجريف MSDN على كل بت من المعلومات أجد متضاربة قطعة في Win32 CryptExportKey وظيفة.انخفاض وها أنا أجد هذه القطعة من invaluble المعلومات:

أي DES key التباديل التي تستخدم PLAINTEXTKEYBLOB, فقط مفتاح كامل الحجم ، بما في ذلك بت التماثل ، قد يتم تصديرها.المفتاح التالي أحجام معتمدة.

الخوارزمية المعتمدة حجم المفتاح

CALG_DES 64 بت

CALG_3DES_112 128 بت

CALG_3DES 192 بت

لذلك لا تصدير مفتاح متعددة من 64 بت!ياللروعة!الآن لإصلاح قانون .صافي الجانب.

.صافي الواردات رمز قرص

بايت أمر مهم أن نأخذ في الاعتبار عند استيراد تيار بايت يحتوي على مفتاح التي تم تصديرها ككائن من CryptoAPI.اثنين API لا تستخدم نفس النظام بايت, ولذلك ، @nic-قوية يشير إلى عكس صفيف بايت ضروري قبل في الواقع محاولة استخدام المفتاح.وغيرها من تلك الأمور تعمل كما هو متوقع.ببساطة حلها:

Array.Reverse( keyByteArray );

الختام

آمل أن يساعد هذا شخص ما هناك.لقد قضيت الكثير من الوقت في محاولة لتتبع هذا.ترك أي تعليق إذا كان لديك المزيد من الأسئلة أستطيع أن محاولة للمساعدة في ملء أي تفاصيل.

سعيد التشفير!

نصائح أخرى

حسنا ننسى الجواب الأخير لا أستطيع قراءة :) كنت تعمل مع 3Des مفاتيح لا مفاتيح RSA.

عملت على مجموعة من التعليمات البرمجية إلى تبادل المفاتيح بين .صافي ، CryptoAPI و openssl.وجدت الكثير من الخير التعليمة البرمجية الموجودة في المثال هنا من أجل القيام الرئيسية التحويلات:

http://www.jensign.com/JavaScience/cryptoutils/index.html

هناك بعض 3des الاشياء في بعض من تلك الأمثلة ، لكنها كانت تتعلق بينسل> .صافي iirc.

أنا أيضا مجرد نظرة إلى الوراء على مفتاح RSA رمز شيء واحد أنا لاحظت أنا به هو استخدام مجموعة.عكس() على جميع الأجزاء الرئيسية من مفتاح RSA (D,DP,DQ,InverseQ,معامل,P,Q) أعتقد أن تحويل endian.أتذكر أن يجري غير واضحة عند معالجة المشكلة.

يأمل البعض من أن يساعد.حظا سعيدا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top