سؤال

وأنا باستخدام شهادة الناتجة عن makecert الذي لديه المفتاح الخاص والعام على حد سواء. يستخدم الجانب جافا هذا المفتاح العام لتشفير البيانات وصافي يفك مرة أخرى.

واني اسعى الى فك تشفير سلسلة جاوة المشفرة 64 بت و الحصول على بيانات سيئة.

لمعرفة ما اذا كان كل شيء على ما نهاية on.Net جيدة، حاولت فريست لتشفير مع المفتاح العمومي ومن ثم فك تشفير باستخدام الخاص نفس الشهادة. قانون بلدي يشبه هذا.

X509Certificate2 cert = GetCert(key, StoreName.My, StoreLocation.LocalMachine);
RSACryptoServiceProvider provider =  (RSACryptoServiceProvider)cert.PrivateKey;

RSACryptoServiceProvider publicprovider = (RSACryptoServiceProvider)cert.PublicKey.Key;

if (cert.HasPrivateKey)
    MessageBox.Show("Got private key");

byte[] encrypted = publicprovider.Encrypt(Encoding.UTF8.GetBytes(text), false);
byte[] decryptedBytes = provider.Decrypt(encrypted, false); 

وحتى هنا أنا على الحصول على الخطأ. أنا شيء مفقود؟

وشهادة تبدو صالحة مع كل من المفتاح العمومي والخاص.

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

المحلول 4

وأخيرا وجدت هذه المشكلة. لم أكن وضع مفتاح makecert لتحديد أنها مفتاح RSA التشفير.

نصائح أخرى

وكان لي نفس المشكلة مع سيرت موقعة ذاتيا، وكانت القضية التي كنت توليد سيرت مع -sky signature التبديل بدلا من -sky exchange (استخدام التوقيع لتوقيع وتبادل للتشفير / فك التشفير)

وهنا هو بلدي القيادة الكاملة لmakecert الذي يعمل:

makecert -r -pe -a sha1 -n "CN=MyName" -ss my -sr CurrentUser -sky exchange

والتعليمة البرمجية التالية يعمل بشكل جيد بالنسبة لي:

        RSACryptoServiceProvider privateKey = new RSACryptoServiceProvider();
        privateKey.FromXmlString("<RSAKeyValue><Modulus>wL8s+C8SnnlaaqR+VsyijmxOJOARNa4o7ZNsqfy3+9J9Ol2JNSjjMfQWoUnFtClzJBlZhU5KtuazQe8ZKXTX9YvKoJdRhlsonZkC04qiTMdO/FZIH00GrCRxeQ7XDnQnvPB9Bdsvs//7zrY3f7eLIkpIyK9cQHU+5jjJd5IT0eE=</Modulus><Exponent>AQAB</Exponent><P>83xxN7jvpg5z16pxz2tIQIdqd/EfmikR9Q2TjG2tosWkUSvtyx0xHZ9EqdTUbSGZZ+jgrabzkafYc7Mplylwew==</P><Q>yqcnYSZEXHwJvRWi2V09PNEENTozQZywcFptUUGar9TciaQvoNv3lpnfzUKNBRdhzq4lImxkamajZlTWE5buUw==</Q><DP>37HqilkbwyHwB6mOGhPkM3S1ujAK6qTk3JB2iEOTjMGrru9+7maJYz+Z47Wm3ARMXgyzrpZ9m8nqsJFfmoL11Q==</DP><DQ>v285tv8kMs2FkZYfuP/oOkwkkneBNejjj68Md2bmzlThZDCyQV2pvB1tmgPVHUsiPNCrCaKlFRISJzfa5rR8Ow==</DQ><InverseQ>fgJE2TRe/SS+YqW0/I+FtHrdfbbao0/R3pHD4r4oceZQUemlBgZ7DxOAetebHKthlOdjGkmfWYB8EU4XoWggqw==</InverseQ><D>FMLCwjy3wbAKiCANp6XFAJgz1o7365NFv0k41BpvasViTa4TgFFWH2ROJ7M9g0lPqJy+YrhrHcY9mqV5TVjTheQp0JeckrgO2B39XngPMAMMdne3rWGpf0Pfbj3FLfchMk6XYDXSZzCS2CmSeRA4aBMb+4R3YurixyJLrnGRMH0=</D></RSAKeyValue>");
        RSACryptoServiceProvider publicKey = new RSACryptoServiceProvider();
        publicKey.FromXmlString("<RSAKeyValue><Modulus>wL8s+C8SnnlaaqR+VsyijmxOJOARNa4o7ZNsqfy3+9J9Ol2JNSjjMfQWoUnFtClzJBlZhU5KtuazQe8ZKXTX9YvKoJdRhlsonZkC04qiTMdO/FZIH00GrCRxeQ7XDnQnvPB9Bdsvs//7zrY3f7eLIkpIyK9cQHU+5jjJd5IT0eE=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>");

        {
            string text = "foo";
            byte[] encrypted = publicKey.Encrypt(Encoding.UTF8.GetBytes(text), false);
            byte[] decryptedBytes = privateKey.Decrypt(encrypted, false);
        }

ويمكن النقر المزدوج تحقق من أن المفتاح الخاص تصديرها هو من cert.PrivateKey والمفتاح العمومي هو من cert.PublicKey.Key؟

وأنا تعثرت عبر هذه الصفحة عندما كنت أحاول العثور على أمثلة من الاستخدام makcert مع x509 الشهادات وآر إس إيه باستخدام C #، وللأسف لم يقدموا سوى جزء من الحل. أضع كل بت معا في دخول بلوق أن الناس قد تكون مهتمة في، ويمكن العثور عليها هنا: http://nick-howard.blogspot.com /2011/05/makecert-x509-certificates-and-rsa.html

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