سؤال

حصلت على وحدة نمطية تقوم RSA بتشفير البيانات وينتقل إلى C#. يحتاج C# إلى فك تشفيره استنادًا إلى المفتاح العام (64 بت مشفر) ورمز المميز.

لدي رمز الرمز المميز ، 64 بت مفتاح عام مشفر ، يمكن أن يساعدني البعض في الحصول على العينة للبدء. كل ما أعرفه من Java End هو أنه يستخدم. لقد حصلت على النتيجة من Java End وأحتاج إلى كتابة محلل في C# لفك تشفير هذا. أحصل على كل من المفتاح العام ورمز المميز كقيمة سلسلة.

    Cipher cipher = Cipher.getInstance(ALGORITHM); //Algorithm = "RSA"
    cipher.init(Cipher.DECRYPT_MODE, key);

شكرًا

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

المحلول

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

إذا كان هذا صحيحًا ، فستحتاج إلى العثور على المفتاح الخاص. يتم تخزين هذا في بعض الأحيان في ملف تنسيق PKCS #12 ، مع ملحق ".p12" أو ".pfx". ستحتاج إلى كلمة مرور للوصول إلى المفتاح الخاص إذا تم تخزينه في مثل هذا الملف.

بدلاً من ذلك ، تستخدم OpenSSL وغيرها من المرافق ملفات مفاتيح خاصة يمكن أن تكون مصبوغة أو ثنائية. هذه لها مجموعة متنوعة من الامتدادات ، وقد تكون أو لا تكون محمية بكلمة مرور. إذا كان الملف الذي لديك سطر رأس من "----- تبدأ مفتاح RSA الخاص -----" أو "----- ابدأ المفتاح الخاص -----" ، هذا هو المفتاح الخاص في الواقع .

أخيرًا ، يمكن لـ Windows تخزين المفاتيح الخاصة في متجر المفاتيح الداخلي.

عندما توضح موقع المفتاح الخاص ، يرجى تحديث سؤالك.


إذا تم استخدام المفتاح الخاص على جانب Java ، فقد يكون ذلك محاولة لإجراء توقيع رقمي. على الرغم من أن جميع مقدمي خدمات Java عدة ، قمت باختبارهم ينتجون نتائج صحيحة عند استخدام (AB) بهذه الطريقة ، إذا كنت تقوم بتوقيع ، Signature يجب استخدام الفصل. يجب أن يستخدم رمز C# كائن توقيع "للتحقق من" التوقيع أيضًا.

يتم تنفيذ التشفير مع المفتاح الخاص. منذ عام المفتاح هو عام، يمكن لأي شخص فك تشفير الرسالة ؛ أي ، الرسالة ليست سرية. يتم استخدام المفاتيح العامة من قبل المستلمين للتحقق من الرسائل الموقعة.

نصائح أخرى

تحقق من هذا الرمز.

public static string Decrypt(string inputText)
      {
        RijndaelManaged rijndaelCipher = new RijndaelManaged();
        byte[] encryptedData = Convert.FromBase64String(inputText.Replace(" ","+"));
        PasswordDeriveBytes secretKey = new PasswordDeriveBytes(ENCRYPTION_KEY, SALT);

        using (ICryptoTransform decryptor = rijndaelCipher.CreateDecryptor(secretKey.GetBytes(32), secretKey.GetBytes(16)))
        {
          using (MemoryStream memoryStream = new MemoryStream(encryptedData))
          {
            using (CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read))
            {
              byte[] plainText = new byte[encryptedData.Length];
              int decryptedCount = cryptoStream.Read(plainText, 0, plainText.Length);
              return Encoding.Unicode.GetString(plainText, 0, decryptedCount);
            }
          }
        }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top