سؤال

حسنا، لقد كنت أذهب من خلال الجحيم الشخصية هذه الأيام

أواجه بعض المشاكل في فك تشفير رسالة تم تشفيرها باستخدام RSA وأنا أفشل دائما مع "RSA / OAEP-MGF1 (SHA-1): النص المشفر غير صالح"

  1. لدي مفتاح خاص مشفرة في Base64 وقمت بتحميله:

        RSA::PrivateKey private_key;
        StringSource file_pk(PK,true,new Base64Decoder);
        private_key.Load( file_pk );
    
  2. ثم انتقل إلى فك شفرة الرسالة عن طريق القيام:

    RSAES_OAEP_SHA_Decryptor decryptor(private_key);
    
    AutoSeededRandomPool rng;
    
    string result;
    StringSource(ciphertext, true,
        new PK_DecryptorFilter(rng, decryptor,
            new StringSink(result)
        )
    );
    

بقدر ما أستطيع أن أقول، يجب أن يتم تحليل الرسالة دون أي مشاكل. ciphertext هو سلسلة STD :: حتى لا 0 في النهاية التي يمكن أن تفعل شيئا غير متوقع.

أنا فقط من شيء ما، وما إذا كان المفتاح الخاص غير صحيح ولكن يمكن تحميله على أي حال دون رمي خطأ فك التشفير. ماذا يرمي عند فك تشفير؟

نأمل أن يتمكن أي شخص من إلقاء بعض الضوء على هذا.

هتافات

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

المحلول

إذا كان المفتاح تالفا فعليا، فيجب أن تكون وظيفة التحميل قد فشلت. ومع ذلك، يمكنك طلب مفتاح الاختبار الذاتي نفسه، والذي يجب أن يكتشف أي فساد، عن طريق الاتصال Validate, ، مثل:

bool key_ok = private_key.Validate(rng, 3);

يحدد المعلمة الثانية (هنا، 3) مقدار التحقق الذي يتعين القيام به. بالنسبة إلى RSA، سيؤدي ذلك إلى تشغيل جميع الاختبارات المتاحة، حتى تلك البطيئة / باهظة الثمن.

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

من الواضح أن إدخال النص المشفر يجب أن يكون متطابقا تماما لما تم إنتاجه أصلا على جانب تشفير. لتصحيح الأخطاء، طريقة جيدة للتحقق من ذلك هي إطعام الفم المشفر في كلا الجانبين في وظيفة التجزئة (متوفرة بالفعل لك بالفعل، بالطبع) ومقارنة المخرجات. إذا قمت بتشفير Hex أو Base64 من النص المشفر للنقل، فيجب التراجع عن أنه قبل أن تعطيه إلى Decryptor RSA.

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