سؤال

ألعب مع نظام التشفير El Gamal ، وهدفي هو أن أكون قادرًا على تشفير وفك تسلسلات النص الطويلة.

يتطلب El Gamal أن يكون النص العادي عددًا صحيحًا. لقد قمت بتحويل سلسلتي إلى بايت [] باستخدام طريقة .getbytes () للسلاسل ، ثم أنشأت biginteger من البايت []. بعد التشفير/فك التشفير ، أقوم بتحويل biginteger إلى بايت [] باستخدام طريقة .tobytearray () لـ BigIntegers ، ثم قم بإنشاء كائن سلسلة جديد من البايت [].

أنا أستخدم مفتاح 1035 بت ، وهذا يعمل بشكل مثالي عندما أشفر/فك تشفير مع سلاسل تصل إلى 129 حرفًا. مع 130 حرفًا أو أكثر ، يتم تشويه الإخراج المنتجة من طريقة فك التشفير.

هل يمكن لأحد أن يقترح كيفية حل هذه المشكلة؟

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

المحلول

كما هو الحال في RSA ، لا يمكنك تشفير قيمة أكبر من المعامل في Elgamal.

نصائح أخرى

يمكنك المحاولة

BigInteger pText = new BigInteger(plaintext.getBytes("UTF-8"));

لجعل الترميز/فك التشفير والتشفير/فك التشفير أكثر تماثلًا ، لكنني لست متأكدًا مما إذا كان هذا هو السبب الجذري.

بالمناسبة ، يجب ألا تستهلك بصمت Exception. أقل ما يمكنك فعله هو فقط catch (UnsupportedEncodingException e).

تحتاج إلى استخدام أرقام إيجابية لعملياتك. لذلك يجب عليك بناء biginteger مثل هذا ،

BigInteger pText = new BigInteger(1, plaintext.getBytes());
// 1: select a random integer k such that 1 <= k <= p-2
BigInteger k = abs(new BigInteger(p.bitLength() - 2, sr));

إذا كنت ترغب في تشفير بيانات معينة باستخدام خوارزمية التشفير غير المتماثلة ، فيمكنك القيام بذلك فقط من أجل كتلة البيانات القصيرة حقًا. الأسباب كلاهما "تقني" (الخوارزمية تعمل بهذه الطريقة) و "عملي" (التشفير غير المتماثل هو بطيء).

الطريقة الصحيحة لتشفير الكتلة الكبيرة من البيانات باستخدام خوارزمية التشفير غير المتماثلة

  1. قم بإنشاء مفتاح عشوائي ("جلسة") لبعض الخوارزمية المتماثلة (AES ، RC4 ، 3Des ، سمها ما شئت).
  2. استخدم هذه الخوارزمية لتشفير البيانات
  3. استخدم الخوارزمية غير المتماثلة لتشفير مفتاح الجلسة
  4. تخزين المفتاح المشفر بالقرب من البيانات.
  5. توقف عن إعادة اختراع العجلة
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top