سؤال

أقوم بتوقيع rsa-sha256 xml باستخدام فئة SignedXML.لكن المشكلة هي أنني بحاجة إلى تغيير CSP لدعم sha256.

هكذا أختار الشهادة

public X509Certificate2 GetCertificateFromStore()
        {
            X509Store st = new X509Store(StoreName.My, StoreLocation.CurrentUser);
            st.Open(OpenFlags.ReadOnly);
            X509Certificate2Collection col = st.Certificates.Find(X509FindType.FindByTimeValid, (object)DateTime.Now, false);

            X509Certificate2 x509Certificate =null;
            X509Certificate2Collection sel = X509Certificate2UI.SelectFromCollection(col, "Certificate", "Select single certificate to sign", X509SelectionFlag.SingleSelection);
            if (sel.Count > 0)
            {
                X509Certificate2Enumerator en = sel.GetEnumerator();
                en.MoveNext();
                x509Certificate = en.Current;
            }
            st.Close();
            //x509Certificate.s
            return x509Certificate;
        }

هذه هي الطريقة التي أحاول بها تغيير معلمة CSP.

byte[] privateKeyBlob;
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            rsa = cert.PrivateKey as RSACryptoServiceProvider;
            try
            {
                privateKeyBlob = rsa.ExportCspBlob(true);
            }
            catch
            {
                throw new ApplicationException("Private key fails to export");
            }
            // To use the RSA-SHA256 the CryptoAPI needs to select a special CSP: Microsoft Enhanced RSA and AES Cryptographic Provider
            // By reinstantiating a CSP of type 24 we ensure that we get the right CSP.
            CspParameters cp = new CspParameters(24);
            rsa = new RSACryptoServiceProvider(cp);
            rsa.ImportCspBlob(privateKeyBlob);


            signer.SigningKey = rsa;
            signer.KeyInfo = getKeyInfo(signer, cert);

المشكلة هي أنني أستخدم رمز جهاز USB وأشك في أن المفتاح الخاص غير قابل للتصدير.عند تصدير خطأ الرمي 'المفتاح غير صالح للاستخدام في الحالة المحددة.'.

يمكن لأي شخص أن يساعد في كيفية القيام بذلك؟

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

المحلول

إذا كان أي شخص مهتمًا هنا هو الحل الذي أقدمه، فقد انتهى بي الأمر باستخدام إصدار جديد آخر من CSP التابع لجهة خارجية.كان إصدار CSP الذي كنت أستخدمه قديمًا وقمت بالتبديل إلى الإصدار الجديد.الآن التوقيع يعمل.شكرا لمساعدتك.

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