سؤال

عند استدعاء الوظيفة التالية:

byte[] bytes = rsa.Encrypt(System.Text.UTF8Encoding.UTF8.GetBytes(stringToEncrypt), true);

أحصل الآن على الخطأ: طول سيء.

مع سلسلة أصغر تعمل، أي أفكار ما يمكن أن تكون المشكلة هي السلسلة التي أقوم بها أقل من 200 حرف.

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

المحلول

يعني تشفير RSA فقط للحصول على كميات صغيرة من البيانات، وكمية البيانات التي يمكنك تشفيرها تعتمد على حجم المفتاح الذي تستخدمه، على سبيل المثال ل 1024 بت مفاتيح RSA، وحشو PKCS # 1 V1.5، يمكنك تشفير 117 بايت على الأكثر، مع مفتاح RSA 2048، يمكنك تشفير 245 بايت.

هناك سبب وجيه لهذا، والتشفير غير المتماثل باهظ الثمن بشكل حسابي. إذا كنت ترغب في تشفير كميات كبيرة من البيانات، فيجب أن تستخدم تشفير متماثل. ولكن ماذا لو كنت تريد عدم التنصل؟ حسنا ما تفعله بعد ذلك هو استخدام كليهما. يمكنك إنشاء مفتاح متماثل وتبادله باستخدام تشفير غير متماثل، ثم تبادل المفتاح المتماثل بأمان لتشفير كمياتك الكبيرة من البيانات. هذا هو ما يستخدم SSL و WS-آمن أسفل الأغطية.

نصائح أخرى

للحصول على عمليات البحث المستقبلية فيما يتعلق باستثناءات RSA السيئة ...

يمكنك حساب عدد الأقصى لعدد البايتات التي يمكن تشفيرها بحجم مفتاح معين مع ما يلي:

((KeySize - 384) / 8) + 37

ومع ذلك، إذا كانت المعلمة الحشو (OAEP) الأمثل (OAEP) هو الصحيح، حيث أنه في المنشور الأصلي، يمكن استخدام ما يلي لحساب Max Bytes:

((KeySize - 384) / 8) + 7

الأحجام الرئيسية القانونية هي 384 من خلال 16384 بحجم تخطي 8.

كما هو موضح أعلاه، فإن حل استثناءات نوع "بطول ضعيف" هو تهجين استخدام التشفير المتماثل وغير المتماثل، بحيث لا يقيد حجم النص الذي تقوم بتشفيره بحجم المفتاح. تستخدم أساسا تشفير RSA لتشفير بشكل غير متناظري عشوائيا مفتاح .

للتشفير:

  1. توليد مفتاح عشوائي من الطول المطلوب لتقنية التشفير المتماثل مثل AES أو Rijndael.

  2. تشفير النص / البيانات بشكل متماثل باستخدام AES / RIJNDAEL باستخدام المفتاح العشوائي الذي تم إنشاؤه في الخطوة 1.

  3. باستخدام RSA، تشفير المفتاح العشوائي بشكل غير متناظرة الناتج في الخطوة 1.

لفك التشفير:

  1. أولا فك تشفير المفتاح العشوائي AES / Rijndael باستخدام مفتاح RSA الخاص بك.

  2. ثم فك تشفير النص / البيانات الأصلية باستخدام مفتاح عشوائي RSA Decarpted

للحصول على مظاهرة، قد ترغب في الحصول على نظرة هذا المثال التالي في C #:

http://www.technical-recipes.com/2013/using-rsa-to-encrypt-large-data-files-in-c/

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